gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:49:07 25 4
gpt4 key购买 nike

How do I send my custom object in a response. I just want the values printed from my object.

Lets say I have an object of type Person. I am trying to send in REST response body like this.

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

But I get 500 error.Tried this one too:

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

Same error.

Tried setting content type as text/xml.没用。What am I missing here? I tried googling. But not many examples out there, especially with the custom objects;

It returns fine, if I just pass a string to entity() method.

最佳答案

为了从 Resteasy 资源方法返回数据,您需要根据要返回的内容做几件事。

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

    例如,下面的方法根据客户端在其 Accept header 中请求的内容返回 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 支持,您需要做的就是注释 你的 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 {

}

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

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

关于java - RestEasy - Jax-rs - 在响应正文中发送自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17533280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com