我希望所有json响应都是
{
"status":"ok"
"data":"..."
}
我只关心@ResponseBody函数返回值;不需要包装任何对象来执行它;
示例:
@ResponseBody
public String test(){
return "Hello,World"
}
我想要
{
"status":"ok"
"data":"Hello,World"
}
答案 0 :(得分:1)
您必须返回Object而不是String,例如:
public class CustomResponse {
private String status;
private String data;
// Getters & Setters
}
@ResponseBody
public CustomResponse test(){
CustomResponse response = new CustomResponse();
response.setStatus("OK");
response.setData("Hello,World");
return response;
}
答案 1 :(得分:1)
我认为这不是一个好的解决方案但你可以格式化字符串
@RequestMapping(value="testData")
public @ResponseBody String testData(){
String sdata="ok";
String value ="Hello,World";
return "{\"status\" :\""+sdata+"\",\"data \":\""+value+"\"}";
}
答案 2 :(得分:0)
我发现这解决了问题。 rewrite default RequestResponseBodyMethodProcessor可以包装任何对象以返回值
答案 3 :(得分:0)
ResponseBodyAdvice
可以做到。您可以实现处理ReqeustBody的界面。这是api。
在文件中。
允许在执行@ResponseBody或ResponseEntity控制器方法之后但在使用HttpMessageConverter编写正文之前自定义响应。 实现可以直接使用RequestMappingHandlerAdapter和ExceptionHandlerExceptionResolver注册,或者更可能使用@ControllerAdvice注释,在这种情况下,它们将被两者自动检测。
这是一个简单的代码。
@ControllerAdvice
public customerResponseBody implements ResponseBodyAdvice{
@Override
public boolean supports (MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType){
return true;
}
@Override
public Object beforeBodyWrite (Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response){
body = new ResponseTemplate<Object>("001",body);
return body;
}
}