6

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

可以说我有一个类型的对象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()方法,它会返回正常。

4

1 回答 1

15

为了从 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 支持,您需要做的就是PersonObj使用 JAXB 注释来注释您的类,以告诉它如何编组和解组对象。

@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 {

}

只需实现接口并像任何其他 Provider 一样注册它。

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

于 2013-07-08T21:23:04.547 回答