【问题标题】:Set Response media type as either xml or json将响应媒体类型设置为 xml 或 json
【发布时间】:2017-08-08 09:10:40
【问题描述】:

这是我正在使用的代码(其他人的项目):

public class MyResponse

public static Response success(String content) {
        MyResponse aRsponse = response(content);
        return Response.status(Status.OK).entity(aRsponse.getContent()).build();
    }

public static MyResponse response(final String content) {
        return MyResponse.builder().content(content).build();
    }

调用成功方法的 GET/POST 前面有 @Produces(MediaType.TEXT_XML)

我已经实现了一些逻辑来确定 content 是 XML 还是 JSON,并认为我会将其作为参数传递给成功。所以像:

public static Response success(String content, boolean isJson)

现在我需要设置响应的媒体类型(使用 if/else)。我知道我需要类似于.type(MediaType.TEXT_XML); 的东西,但鉴于我必须使用的代码以及我找到的各种示例和文档,我似乎无法弄清楚这一点。

我们将不胜感激任何帮助或正确方向的指导。谢谢!

【问题讨论】:

  • 我尝试将代码更改为:Response.type(MediaType.TEXT_XML).status(Status.OK).entity(aRsponse.getContent()).build();并得到“响应类型的方法类型(字符串)未定义”。
  • 只是一个与问题无关的问题。所有方法都是静态的有特殊原因吗?
  • 我不确定为什么这些方法是静态的。这就是我必须使用的代码的来源。我会试着弄清楚。

标签: java json xml


【解决方案1】:

我假设您使用的是 JAX-RS,对吧?

查看Response 对象文档。您正在寻找type 方法。

http://docs.oracle.com/javaee/6/api/javax/ws/rs/core/Response.ResponseBuilder.html

要设置不同的MediaType,您的代码将如下所示:

Response.status(Status.OK).type(MediaType.TEXT_XML).entity(aRsponse.getContent()).build();

当您编写代码Response.attribute 时,您使用的是Builder Pattern。因此,要将某些内容更改为将要构建的新对象,您必须使用适当的方法来设置新类的属性值。

【讨论】:

  • 是的,我正在使用 JAX-RS。我为我的无知道歉,我是新手,但是在使用您的代码时,我收到错误“方法类型(字符串)未定义类型响应”。我将查看您链接的文档。谢谢!
  • 对不起,我没有按正确的方式排列参数的顺序。代码现在应该可以工作了。
  • 哦,这似乎已经解决了。非常感谢!我将进一步检查文档,看看我是否可以弄清楚订单的“为什么”在那里。
【解决方案2】:

假设您使用的是 JAXB/JAX-RS 和最新版本,则无需担心这些事情。只需返回对象并让实现处理其余部分。无需以编程方式设置媒体类型或构建。

例如。

@GET
@Path("/xmlexample")
@Produces(MediaType.APPLICATION_XML)
public MyObject xml() {
  return new MyObject();
}

@GET
@Path("/jsonexample")
@Produces(MediaType.APPLICATION_JSON)
public MyObject json() {
  return new MyObject();
}

您只需要确保您的班级具有正确的注释,例如。 @XmlElement。

【讨论】:

  • 感谢您的帮助。我应该说的问题是 GET 可以获取 JSON 或 XML,我不知道是哪个。然后我必须以编程方式找出哪一个并返回一个设置为正确类型的响应。
猜你喜欢
  • 2022-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
  • 2011-07-26
  • 2017-12-27
  • 2020-07-30
相关资源
最近更新 更多