使用Spring mvc 的返回值拦截器对controller的返回值做拦截处理
来源:互联网 发布:数据库日志文件太大 编辑:程序博客网 时间:2024/05/01 13:35
使用场景:
有时我们针对特定的返回值类型,希望在Controller处理之后再对结果进行某些特殊的处理,比如修改HTTP的头,或者修改对象等等,这时我们可以采用如下的方式进行统一的处理
1.定义特定的返回值对象
public class Pet { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Pet{" + "name='" + name + '\'' + ", age=" + age + '}'; }}2.定义返回值类型拦截处理器
public class ReturnHandler implements HandlerMethodReturnValueHandler { /** * 该处理程序是否支持给定的方法返回类型(只有返回true才回去调用handleReturnValue) */ @Override public boolean supportsReturnType(MethodParameter methodParameter) { return methodParameter.getParameterType() == Pet.class; } /** * 处理给定的返回值 * 通过向 ModelAndViewContainer 添加属性和设置视图或者 * 通过调用 ModelAndViewContainer.setRequestHandled(true) 来标识响应已经被直接处理(不再调用视图解析器) */ @Override public void handleReturnValue(Object o, MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest) throws Exception { Assert.isInstanceOf(Pet.class, o); Pet p=((Pet)o); p.setName("拦截成功"); /** * 标识请求是否已经在该方法内完成处理 */ modelAndViewContainer.setRequestHandled(true); HttpServletResponse response = nativeWebRequest.getNativeResponse(HttpServletResponse.class); response.setContentType("text/plain;charset=UTF-8"); response.getWriter().append(JSON.toJSONString(p)).flush(); }}
3.将返回值拦截器注册到Spring MVC的返回值处理器
@Configurationpublic class WebMvcConfig extends WebMvcConfigurerAdapter { @Override public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers) { ReturnHandler returnHandler=new ReturnHandler(); returnValueHandlers.add(returnHandler); super.addReturnValueHandlers(returnValueHandlers); }}
4.编写测试controller
@RequestMapping(value = "h3") public Object testHeader() { Pet pet=new Pet(); pet.setName("hello"); return pet; }注意点就是 controller的方法不能使用 @RequestBody修饰 ,因为@RequestBody就是告诉Spring MVC使用Map类型的解析器来解析返回值,这样我们自定义的解析器就没有机会被调用了。
阅读全文
0 0
- 使用Spring mvc 的返回值拦截器对controller的返回值做拦截处理
- 使用SpringAOP切面实现对controller的拦截,并对url,参数和返回值记录
- spring mvc controller返回值的类型
- Spring AOP 对Spring MVC的Controller切面拦截不起作用
- spring mvc对视图解析器controller返回数据转换json的处理的相关配置
- spring拦截器 拦截springMVC的controller
- Spring MVC 拦截全局异常用Json返回的方式
- spring mvc框架的aop拦截器验证controller层的注解值
- 利用SpringMVC拦截器控制Controller返回值
- Spring Boot AOP之对请求的参数入参与返回结果进行拦截处理
- spring mvc inteceptor 拦截器实现计算controller 的执行时间
- spring mvc inteceptor 拦截器实现计算controller 的执行时间
- 基于Spring的Controller拦截器做性能监控
- Spring拦截器实现controller层json数据返回
- Spring mvc 拦截器的简单使用
- spring mvc 中拦截器的使用
- spring mvc 拦截器 HandlerInterceptor 的使用
- spring mvc拦截器的使用记录
- SQL IN操作符
- 解决spring boot接收前端传递过来的json数据时,接收到的时间与实际传递时间不一致的问题
- qtcreator中常用快捷键总结
- RSA 加密解密
- 机器人学、机器视觉与控制:MATLAB算法基础
- 使用Spring mvc 的返回值拦截器对controller的返回值做拦截处理
- awk命令
- 二维码的两种生成方法(前端js生成,后端java生成)
- 集合之间的继承关系
- 订单添加 批量删除 搜索 排序 时间排序 物流状态
- 损失函数中正则化项L1和L2的理解(二)
- 人工智能能解决安防哪些实际需求?
- Composer的下载安装并使用
- android studio3.X以后版本 gradle依赖改为 implementation