【问题标题】:Setting Http Status Code and customized status message and returning JSON output using Jersey in RESTful Service在 RESTful 服务中使用 Jersey 设置 Http 状态码和自定义状态消息并返回 JSON 输出
【发布时间】:2015-07-24 20:34:38
【问题描述】:

我已经使用 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

但我只能执行其中一项任务,返回 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; 
}
}

谁能提供解决方案?

【问题讨论】:

    标签: json web-services rest jersey


    【解决方案1】:

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

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

    1. 设置 @Path("/user") 以至少在资源级别设置端点路径。 需要设置路径以寻址您的资源(端点)

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

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

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

    享受:)

    【讨论】:

    • 谢谢J-E!!你的回答完全符合我的目的。再次感谢。:)
    猜你喜欢
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多