如何在JavaEE7中获得JAX-RS层中Java对象的JSON表示?

如何在JavaEE7中获得JAX-RS层中Java对象的JSON表示?,json,jakarta-ee,gson,java-ee-7,jsonobject,Json,Jakarta Ee,Gson,Java Ee 7,Jsonobject,我们目前正在使用JavaEE5,在发送响应之前,我们将POJO转换为JSON @GET @Path("/books") @Produces(MediaType.APPLICATION_JSON) public Response getBooks() { List<Book> listOfBooks = getMiscService().getbooks(); String response = "{\"books\":" + gson

我们目前正在使用JavaEE5,在发送响应之前,我们将POJO转换为JSON

    @GET
    @Path("/books")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getBooks()  {
    List<Book> listOfBooks = getMiscService().getbooks();
    String response = "{\"books\":" + gson.toJson(listOfBooks) + "}";               
    return Response.status(Response.Status.OK).entity(response).build();
    }
上面的myObject需要是我的对象的JSON表示,对吗

我正在考虑这个问题。但这仍然使用Gson

JsonObject jsonObject = Json.createObjectBuilder().add("books", gson.toJson(myObject));
这里的推荐方式是什么


谢谢

JAX-RS将把您的对象转换为JSON,无需手动操作。即,以下代码:

@GET
@Path("/books")
@Produces(MediaType.APPLICATION_JSON)
public Response getBooks()  {
    List<Book> listOfBooks = getMiscService().getbooks();
    return Response.status(Response.Status.OK).entity(listOfBooks).build();
}
如果您想要一个
书籍
包装器,只需制作一个bean:

public class BooksWrapper {
    private List<Book> books;
    public BooksWrapper(List<Book> books) {
        this.books = books;
    }
    public List<Book> getBooks() {
        return books;
    }
}
公共类BooksWrapper{
私人书目;
公共书籍包装(列出书籍){
这本书=书;
}
公共列表getBooks(){
还书;
}
}
并将REST方法转换为返回此类型:

@GET
@Path("/books")
@Produces(MediaType.APPLICATION_JSON)
public Response getBooks()  {
    List<Book> listOfBooks = getMiscService().getbooks();
    BooksWrapper result = new BooksWrapper(listOfBooks);
    return Response.status(Response.Status.OK).entity(result).build();
}
@GET
@路径(“/books”)
@产生(MediaType.APPLICATION_JSON)
公众回应{
listOfBooks=getMissService().getbooks();
BooksWrapper结果=新的BooksWrapper(图书列表);
返回Response.status(Response.status.OK).entity(result.build();
}

我想只有某些提供商会转换为JSON,比如RestEasy或Jersey?对的无论如何,这是一个比使用gson更好的方法,我想这肯定很容易,但我相信这是标准/按规范的行为。
public class BooksWrapper {
    private List<Book> books;
    public BooksWrapper(List<Book> books) {
        this.books = books;
    }
    public List<Book> getBooks() {
        return books;
    }
}
@GET
@Path("/books")
@Produces(MediaType.APPLICATION_JSON)
public Response getBooks()  {
    List<Book> listOfBooks = getMiscService().getbooks();
    BooksWrapper result = new BooksWrapper(listOfBooks);
    return Response.status(Response.Status.OK).entity(result).build();
}