Нужен RESTLET + JAX-RS + JSON Хороший пример - PullRequest
4 голосов
/ 16 февраля 2012

Я экспериментирую со структурой Restlet с AppEngine и пытаюсь получить список объектов (например, ArrayList) в представление JSON с помощью ресурса JAX-rs

Например, пример класса пользователя:

 public class User {

    private String lastname;

    private String firstname;

    public User(){};
    public User(String lname,String fname){
        this.firstname = fname;
        this.lastname = lname;
    }

    public String getLastname() {
        return lastname;
    }
    public void setLastname(String lastname) {
        this.lastname = lastname;
    }

    public String getFirstname() {
        return firstname;
    }
    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }
 }

Я хочу получить список пользователей, подобных этому

@GET @Path("users")
@Produces(MediaType.APPLICATION_JSON)
public ArrayList<User> getUsers() {     
    ArrayList<User> users = new ArrayList<User>();
    users.add(new User("userlastname1", "userfirstname1"));
    users.add(new User("userlastname3", "userfirstname2"));

    return users;
}

и я хочу получить это представление JSON

[
    {
        lastname: "userlastname1",
        firstname: "userfirstname1"
    },
    {
        lastname: "userlastname2",
        firstname: "userfirstname2"
    }
]

Каков наилучший способ достичь этого?

В документации Restlet упоминается, что процесс сериализации автоматизирован, да, это относится только к одному объекту, например «Пользователь»

new User("userlastname1", "userfirstname1")

верните мне хорошее представление JSON

{
    lastname: "userlastname1",
    firstname: "userfirstname1" 
}

Если кто-нибудь может дать мне некоторое объяснение / пример кода / идею об этом. высоко ценится

С уважением

Ответы [ 2 ]

1 голос
/ 17 января 2014
@Path("/users")
public interface IUserRoutes
{
    @GET
    Response getUsers();
}


@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class UserRoutesImpl implements IUserRoutes
{
    public Response getUsers()
    {
        return new UserResponse().getUsers();
    }
}


public class UserResponse
{
    public Response getUser()
    {
        List<Users> users = new UserModel().getUsers();
        return Response.ok(users).build();
    }
}

Ваш пользовательский объект должен быть POJO.

public class User
{
    private String firstName;
    private String lastName;

    public String getFirstname()
    {
        return firstName;
    }
    public String getLastname()
    {
        return lastName;
    }
    //etc 
}
1 голос
/ 17 февраля 2012

Я на самом деле только что понял это для себя, используя версию Restlet для Java EE. Не уверен, что этот модуль доступен для песочницы GAE, но я просто добавил расширение Restlet для Джексона в качестве зависимости, и оно работало как прелесть.

Если вы используете Maven:

<dependency>  
    <groupId>org.restlet.jee</groupId>  
    <artifactId>org.restlet.ext.jackson</artifactId>  
    <version>2.0.10</version>
</dependency>
...