如何在回复中发送自定义对象。我只想要从我的对象打印的值。
假设我有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()
方法,则返回正常。
答案 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默认支持编组以下数据类型:
如果您希望支持的数据类型在此表中,那么
表示它们受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
注释中。