将Response媒体类型设置为xml或json

时间:2017-03-16 23:55:45

标签: java json xml

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

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)

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

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

2 个答案:

答案 0 :(得分: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。因此,要将某些内容更改为要构建的新对象,必须使用适当的方法为新类设置属性值。

答案 1 :(得分:1)

假设您使用的是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。