如何使json响应在春季统一格式?

时间:2015-10-29 09:21:48

标签: spring spring-mvc spring-boot

我希望所有json响应都是

{
   "status":"ok"
    "data":"..."
}

我只关心@ResponseBody函数返回值;不需要包装任何对象来执行它;

示例:

@ResponseBody
public String test(){
   return "Hello,World"
}

我想要

{
   "status":"ok"
    "data":"Hello,World"
}

4 个答案:

答案 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;
    }
}