在RESTful Service中使用Jersey设置Http状态代码和自定义状态消息并返回JSON输出

时间:2015-05-13 13:46:26

标签: json web-services rest jersey

我使用Jersey实现了RESTful服务。我能够以JSON格式返回所需的输出。但是,我还需要设置Http状态代码和我的自定义状态消息。状态代码和状态消息不应该是JSON输出的一部分。

我尝试了以下链接:

  1. JAX/Jersey Custom error code in Response
  2. JAX-RS — How to return JSON and HTTP status code together?
  3. Custom HTTP status response with JAX-RS (Jersey) and @RolesAllowed
  4. 但我只能执行其中一项任务,要么返回JSON,要么设置HTTP状态代码和消息。

    我的代码如下:

    import javax.ws.rs.core.Response;
    
    public class MyClass(){
    @GET
    @Produces( { MediaType.APPLICATION_JSON })
        public MyObject retrieveUserDetails()
    {
    MyObject obj = new MyObject();
    //Code for retrieving user details.
    
    obj.add(userDetails);
    Response.status(Status.NO_CONTENT).entity("The User does not       exist").build();
    return obj; 
    }
    }
    

    任何人都可以为此提供解决方案吗?

1 个答案:

答案 0 :(得分:0)

错误是:
1.如果status设置为NO_content(HTTP204),则规范是将实体设置为空。因此,实体将以空的形式返回给您的客户。这不是你想要做的所有情况,如果找到返回详细信息,如果没有找到返回404.

2.Produces({MediaType.APPLICATION_JSON})告诉您将返回json内容,并且实体的内容不是json。你将不得不返回一个json。你会看到我使用杰克逊作为泽西岛的一部分。

  1. 设置@Path(" / user")以至少在资源级别设置端点路径。 需要设置路径才能添加资源(端点)

  2. 使用bean来传递多个东西。我为你做了一个示例bean。

  3. 作为HTTP返回的改进注意事项,请使用正确的 404:找不到资源 204:空...... 看看规范:http://www.wikiwand.com/en/List_of_HTTP_status_codes

  4. 查看Gist中的完整代码:https://gist.github.com/jeorfevre/260067c5b265f65f93b3

    享受:)