【问题标题】:Consuming JSON request and producing different output使用 JSON 请求并产生不同的输出
【发布时间】:2012-08-27 08:43:37
【问题描述】:

您能否指出我的文章或解释我如何声明使用 JSON 请求并基于 JSON 中的参数生成不同格式的输出的 RESTful Web 服务,这意味着客户可以获取 JSON 格式的输出,但也可以获取 pdf 格式的输出。我在 JBoss 5.1 上使用 Java 和 RestEasy。

【问题讨论】:

    标签: java json rest restful-url


    【解决方案1】:

    您可以将请求映射到返回 RestEasy Response 对象的方法上,使用 ResponseBuilder 构建响应,根据 JSON 中的参数动态设置响应的 mime 类型。

    @POST
    @Path("/foo")
    @Consumes("application/json")
    public Response fooService(MyObject obj) {
       MyResponseEntity entity = MyObjectService.retrieveSomethingFrom(obj);
       return Response.status(200).entity(entity).type(obj.isXml() ? "text/xml" : "application/json").build();
    }
    

    这样,如果代表传入 JSON 的 MyObject 域对象将参数 xml 设置为 true,则将 Response 对象参数化为生成 text/xml,否则将生成 application/json。 RestEasy 应该完成剩下的工作。

    【讨论】:

    • 服务在外部被调用,客户端没有对“MyObject”的引用。那会有问题吗?他会怎么称呼这个服务?
    • 您的服务如何将 JSON 解析为域对象?您说在提供给服务的 JSON 中有一个参数。如果是这样,当 JSON 转换为 Java 对象时,您将在此属性上有一个 getter,以便您能够决定应该生成什么类型​​的数据(json、xml 等等……)。您的客户端正在发送 JSON,所以这不是什么大问题。
    • 我明白了,我正在使用 Jackson 作为提供者将请求(反)序列化为域对象..
    【解决方案2】:

    你可以这样使用

    @Path("/")
    public class Test {
    
    @Path("/test")
    @POST 
    @Consumes("application/json")
    @Produces("text/plain")
    public Response addOrderJSON(OrderDetails details) {...}
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 2014-05-06
      • 2014-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      • 1970-01-01
      相关资源
      最近更新 更多