最近一道面试题,要求同一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