java-ee - Java 7中 JAX RS层中Java对象的JSON表示方法?

  显示原文与译文双语对照的内容

我们目前正在使用,在发送响应之前,我们使用以下方法将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();


 }



我们正在使用谷歌的gson API 。 现在我们将代码重新调整到 Java EE 7 API符合,我想知道是否有任何JSON转换API将POJO转换为 JSON 。

我知道在 Java EE 7中引入了 in 。 但是我仍然想知道,我如何获得POJO的JSON表示。


JsonObject jsonObject = Json.createObjectBuilder().add("books", myObject);



上的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();


}



。将会产生一个像这样的JSON:


[


 {"title":"Book1","author":"Foo",.. . },


 {"title":"Book2","author":"Bar",.. . },


. . .


]



如果你想要一个 books 包装器,只需创建一个 bean:


public class BooksWrapper {


 private List<Book> books;


 public BooksWrapper(List<Book> books) {


 this.books = books;


 }


 public List<Book> getBooks() {


 return books;


 }


}



然后转换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();


}



...