繁体   English   中英

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

[英]Spring Rest return a JSON response with a certain http response code

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

我返回一个JSON响应,如下所示:

public String getUser(String id){

...
return jsonObj;
}

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

这是我的问题:

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

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

使用@ResponseStatus批注:

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

另一种方法:如果要以编程方式决定要返回什么状态,可以使用ResponseEntity 将方法的返回类型更改为ResponseEntity<String> ,将为您提供像这样的DSL:

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

我该怎么做

这是我的工作方式,即从Spring Handler方法返回JSON。 我的技术有些过时,但仍然合理。

配置Jackson将以下内容添加到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以获得有关此内容的详细信息。 浏览到参考页面并搜索@JsonView。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM