RestEasy - Jax-rs - 在响应正文中发送自定义对象

时间:2013-07-08 18:13:31

标签: java rest jax-rs response resteasy

如何在回复中发送自定义对象。我只想要从我的对象打印的值。

假设我有Person类型的对象。我试图像这样发送REST响应体。

  ResponseBuilder response = Response.ok().entity(personObj);
  return response.build();

但我得到500错误。 也试过这个:

  ResponseBuilder response = Response.status(Status.OK).entity(personObj);
  return response.build();

同样的错误。

尝试将内容类型设置为text/xml。没用 我在这里错过了什么?我试过谷歌搜索。但是没有很多例子,尤其是自定义对象;

如果我只是将字符串传递给entity()方法,则返回正常。

1 个答案:

答案 0 :(得分:14)

为了从Resteasy资源方法返回数据,您需要做几件事情,具体取决于您要返回的内容。

  • 您需要使用@Produces注释资源方法 注释告诉Resteasy方法的返回类型应该是什么 是

    例如,下面的方法根据客户端在Accept标题中要求的内容返回XML和JSON。

@GET
@Produces({MediaType.APPLICATION_JSON, 
           MediaType.APPLICATION_XML})
public Response foo()
{
     PersonObj obj = new PersonObj();

     //Do something...
     return Response.ok().entity(obj).build();
}

Resteasy默认支持编组以下数据类型:

enter image description here

如果您希望支持的数据类型在此表中,那么    表示它们受JAXB支持,您需要做的就是注释    带有JAXB注释的PersonObj类告诉它如何操作    对该物体进行编组和解组。

@XmlRootElement
@XmlType(propOrder = {"firstName", "lastName"})
public class PersonObj
{
  private String firstName;
  private String lastName;

  //Getters and Setters Removed For Brevity
}

如果您的内容类型不支持开箱即用,该怎么办?

如果您有自定义内容类型,那么您需要创建一个MessageBodyWriter实现,告诉Resteasy如何编组该类型。

Provider
@Produces({"application/x-mycustomtype"})
public class MyCustomTypeMessageBodyWriter implements MessageBodyWriter {

}

只需实现界面并像其他任何提供商一样注册。

如果您想阅读自定义内容类型,则需要实现自定义MessageBodyReader来处理传入类型,并将其添加到接收方法的@Consumes注释中。