我是Spring的新手。我在Spring中编写了一个REST api,但我不知道如何使用自定义http响应代码返回 JSON 响应。
我按如下方式返回JSON响应:
public String getUser(String id){
...
return jsonObj;
}
但它始终显示200个http ok状态代码。
以下是我的问题:
如何同步响应JSON和HTTP代码?
如何在void函数中返回JSON响应和自定义HTTP代码?
答案 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。