Spring Rest返回带有特定http响应代码的JSON响应

时间:2017-11-22 16:15:11

标签: java json spring rest spring-mvc

我是Spring的新手。我在Spring中编写了一个REST api,但我不知道如何使用自定义http响应代码返回 JSON 响应。

我按如下方式返回JSON响应:

public String getUser(String id){

...
return jsonObj;
}

但它始终显示200个http ok状态代码。

以下是我的问题:

如何同步响应JSON和HTTP代码?

如何在void函数中返回JSON响应和自定义HTTP代码?

2 个答案:

答案 0 :(得分:5)

使用@ResponseStatus注释:

@GetMapping
@ResponseStatus(HttpStatus.ACCEPTED)
public String getUser(String id) {...}

替代方式:如果您想以编程方式决定要返回的状态,可以使用ResponseEntity。将方法的返回类型更改为ResponseEntity<String>,您将获得这样的DSL:

ResponseEntity
        .status(NOT_FOUND)
        .contentType(TEXT_PLAIN)
        .body("some body");

答案 1 :(得分:2)

我是怎么做的

以下是我从Spring Handler方法返回JSON的方法。 我的技术有些过时了, 但仍然是合理的。

配置杰克逊 将以下内容添加到spring配置xml文件中:

<bean name="jsonView"
    class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
</bean>

有了这个, Spring会将返回值转换为JSON并将它们放在响应的主体中。

创建一个实用程序方法来构建ResponseEntity 你有多种处理方法的好处是好的。 而不是样板代码, 创建一个方法来完成标准工作。 ResponseEntity是一个Spring类。

protected ResponseEntity<ResponseJson> buildResponse(
    final ResponseJson jsonResponseBody,
    final HttpStatus httpStatus)
{
    final ResponseEntity<ResponseJson> returnValue;

    if ((jsonResponseBody != null) &&
        (httpStatus != null))
    {
        returnValue = new ResponseEntity<>(
            jsonResponseBody,
            httpStatus);
    }

    return returnValue;
}

注释处理程序方法

@RequestMapping(value = "/webServiceUri", method = RequestMethod.POST)

您还可以使用@PostMethod注释

@PostMethod("/webServiceUri")

从处理程序方法返回ResponseEntity 调用实用程序方法来构建ResponseEntity

public ResponseEntity<ResponseJson> handlerMethod(
    ... params)
{
    ... stuff

    return buildResponse(json, httpStatus);
}

注释处理程序参数 当您使用@RequestBody注释时,Jackson将从json转换为参数类型。

public ResponseEntity<ResponseJson> handlerMethod(
    final WebRequest webRequest,
    @RequestBody final InputJson inputJson)
{
    ... stuff
}

一个不同的故事

您可以使用@JsonView注释。 查看Spring Reference了解详细信息。 浏览到ref页面并搜索@JsonView。