当前位置: 首页 > 面试题库 >

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

彭华皓
2023-03-14
问题内容

如何在响应中发送自定义对象。我只希望
从对象中打印出值。

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


问题答案:

为了从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 {

}

只需实现该接口并像其他任何提供者一样注册它即可。

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



 类似资料:
  • 问题内容: 我现在开始在JAX-RS中使用新的客户端API库,并且到目前为止真的很喜欢它。但是我发现一件事我不知道。我使用的API具有自定义错误消息格式,例如: 它返回400作为状态代码,但还包含描述性错误消息,以告诉您您做错了什么。 但是,JAX-RS 2.0客户端将400状态重新映射为通用状态,因此我丢失了良好的错误消息。它正确地将其映射到BadRequestException,但带有通用的“

  • 然而,JAX-RS2.0客户机正在将400状态重新映射为一般的状态,因此我丢失了良好的错误消息。它正确地将其映射到一个BadRequestException,但带有一个通用的“HTTP 400 Bad Request”消息。 是否有某种类型的拦截器或自定义错误处理程序可以被注入,以便我访问真正的错误消息。我一直在查看文档,但看不到任何方法。 我现在正在使用泽西,但我用CXF尝试了这个,得到了同样的

  • 我正在尝试实现一个CORS响应过滤器,以允许来自我的JavaScript前端的跨域引用。我使用的是Resteasy附带的< code > wildly 10.0 . final ,如果我理解正确的话,它是< code>JAX-RS 2.0的补充。 EDIT:将@Provider添加到CorsResponseFilter中,并作为一个单独的元素添加到RestServiceConfig中。 我需要做什

  • 我正在尝试为我开发的REST API创建一个过滤器,该API遵循以下问题,即使用JAX-RS和Jersey进行基于REST令牌的身份验证的最佳实践。 我错过了什么?提前道谢。

  • 问题内容: 在移动应用程序和Web服务之间具有某种代理,发出发布请求时的响应使我们感到困惑。我们收到状态为200的回复:OK。但是我们找不到/提取JSON响应主体。 我们正在使用JAX-RS。有人可以提供一些提示来从服务器响应中提取JSON正文()吗? 问题答案: 试试这个: 编辑 感谢@Martin Spamer提及它仅适用于Jersey 1.x罐子。适用于Jersey 2.x

  • 什么是resteasy?RESTEasy和JAX-RS有什么区别?和之间有什么区别?