最近一道面試題,要求同一API接口支持不同格式返回值。一開始是設想通過過濾器(Filter)設置返回值,但是並不可行,因為方法返回值一般都是類型需要做轉換,而過濾器則是前置的。另一方面可以通過攔截器的postHandle中進行處理,這里介紹另外一種方法。
1.Controller方法增加ReponseBody注解
@ResponseBody @RequestMapping("/getModule") public ReponseResult GetModuleList(){ List<Module> list = new LinkedList<Module>(); Module m1=new Module(); m1.setId(1); m1.setModulename("test"); list.add(m1); ReponseResult result=new ReponseResult(list,true,null); return result; }
2.返回類型增加XML格式支持
@XmlRootElement public class ReponseResult implements Serializable { //region 屬性 public List<Module> getData() { return data; } public void setData(List<Module> data) { this.data = data; } private List<Module> data; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } private String message; public boolean isSuccess() { return success; } public void setSuccess(boolean success) { this.success = success; } private boolean success; //endregion public ReponseResult() { } public ReponseResult(List<Module> _data, boolean _success, String _message) { this.data = _data; this.success = _success; this.message = _message; } }
3.Spring MVC源碼中根據Requester.Header中的Accept決定返回什么格式
參考文檔:http://www.cnblogs.com/fangjian0423/p/springMVC-xml-json-convert.html
https://blog.csdn.net/fw0124/article/details/48312317
4.使用PostMan請求