一尘不染

Spring MVC:如何修改从控制器发送的json响应

spring

我已经使用像这样的控制器构建了一个JSON REST服务:

@Controller
@RequestMapping(value = "/scripts")
public class ScriptController {

    @Autowired
    private ScriptService scriptService;

    @RequestMapping(method = RequestMethod.GET)
    @ResponseBody
    public List<Script> get() {
        return scriptService.getScripts();
    }
}

它工作正常,但现在我需要修改所有响应并将“状态”和“消息”字段添加到所有响应中。我已经阅读了一些解决方案:

  1. 从某个特定类的所有控制器方法对象返回,例如RestResponse,它将包含“ status”和“ message”字段(但这不是通用解决方案,因为我将不得不修改所有控制器并以新样式编写新控制器)
  2. 截取具有方面的所有控制器方法(但在这种情况下,我无法更改返回类型)
    如果我想将控制器方法返回的值包装到类的对象中,可以提出一些其他通用且正确的解决方案:
public class RestResponse {

    private int status;
    private String message;
    private Object data;

    public RestResponse(int status, String message, Object data) {
        this.status = status;
        this.message = message;
        this.data = data;
    }

    //getters and setters
}

阅读 509

收藏
2020-04-18

共1个答案

一尘不染

如果使用spring 4.1或更高版本,则可以在编写正文之前使用ResponseBodyAdvice定制响应。

2020-04-18