2016-03-27 2 views
1

Я пытаюсь вернуть несколько объектов (таких как String, Boolean, MyOwnClass и т. Д.) Из Java API REST API с использованием JAX-RS в Eclipse.API Java REST: возвращение нескольких объектов из метода API

Вот что я прямо сейчас:

Мой API метод

@Path("/") 
public class myAPI { 

    @GET 
    @Produces({ "application/xml", "application/json" }) 
    @Path("/getusers") 
    public Response GetAllUsers() { 

     //Data Type #1 I need to send back to the clients 
     RestBean result = GetAllUsers(); 

     //Data Type #2 I need to send with in the response 
     Boolean isRegistered = true; 

     //The following code line doesn't work. Probably wrong way of doing it 
     return Response.ok().entity(result, isRegistered).build(); 
    } 
} 

RestBean класс:

public class RestBean { 
    String status = ""; 
    String description = ""; 
    User user = new User(); 

    //Get Set Methods 
} 

Так что я в основном отправка два типы данных : RestBean и Boolean.

Каков правильный способ отправки ответа JSON с несколькими объектами данных?

+1

Отдыхает Ответ может иметь только 1 объект на верхнем уровне, но нет причин, по которым вы не можете иметь объект верхнего уровня, содержащий как ваш логический, так и ваш RestBean. Вам нужно будет либо построить его вручную (используя одну из реализаций JSONObject), либо создать аннотированный класс, который создаст нужный объект. – Tibrogargan

+0

Является ли моя реализация правильной, если я удаляю один возвращаемый объект из последней строки кода? return Response.ok(). entity (result) .build(); Это верно? @Tibrogargan – Dinuka

+0

Я не уверен, что вся реализация верна, но это будет правильное использование entity() – Tibrogargan

ответ

5

Во-первых, соглашения Java состоят в том, что имена классов начинаются с заглавных букв и имен методов строчной буквой. Как правило, хорошая идея следовать им.

Вам необходимо обернуть свой ответ внутри одного класса, как предлагает @Tibrogargan.

public class ComplexResult { 
    RestBean bean; 
    Boolean isRegistered; 

    public ComplexResult(RestBean bean, Boolean isRegistered) { 
     this.bean = bean; 
     this.isRegistered = isRegistered; 
    } 
} 

, а затем ваш ресурс выглядит ...

public Response getAllUsers() { 
    RestBean restBean = GetAllUsers(); 
    Boolean isRegistered = true; 
    final ComplexResult result = new ComplexResult(bean, isRegistered); 

    return Response.ok().entity(Entity.json(result)).build(); 
} 

Что вам действительно нужно знать, однако, является то, что ваш документ ответ должен выглядеть нравится. У вас может быть только один документ-ответ, для которого предназначена оболочка, и способ, которым сериализуется ваша обертка, влияет на доступ к частям документа.

Примечание. У вас есть ваш ресурс, указанный как способный создавать как XML, так и JSON, и то, что я сделал, работает только для json. Вы можете получить рамки, чтобы сделать всю тяжелую работу контента-переговоры для вас, и это, вероятно, будет хорошая идеей, просто по возвращению типа документа из метода, а не Response ...

public ComplexResponse getAllUsers() { 
    ... 
    return new ComplexResult(bean, isRegistered); 
+0

Благодарим вас за подробный ответ! :) – Dinuka

Смежные вопросы