博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring HandlerMethodReturnValueHandler接口
阅读量:2244 次
发布时间:2019-05-09

本文共 1834 字,大约阅读时间需要 6 分钟。

接口介绍

HandlerMethodReturnValueHandler是RequestMappingHandlerAdapter用来处理完映射控制类,对方法返回的值进一步进行处理。

接口定义

/** * 策略模式接口:处理 Controller 方法返回值 */public interface HandlerMethodReturnValueHandler {
/** * 该处理程序是否支持给定的方法返回类型(只有返回true才回去调用handleReturnValue) */ boolean supportsReturnType(MethodParameter returnType); /** * 处理给定的返回值 * 通过向 ModelAndViewContainer 添加属性和设置视图或者 * 通过调用 ModelAndViewContainer.setRequestHandled(true) 来标识响应已经被直接处理(不再调用视图解析器) */ void handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception;}

例子

在定义自己的handler

public class MyHandlerMethodReturnValueHandler implements HandlerMethodReturnValueHandler {
@Override public boolean supportsReturnType(MethodParameter returnType) { return returnType.getParameterType() == Person.class; } @Override public void handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception { Assert.isInstanceOf(Person.class, returnValue); //标识请求是否已经在该方法内完成处理 mavContainer.setRequestHandled(true); // 获取方法上的注解 PersonAnnotation personAnnotation = returnType.getMethodAnnotation(PersonAnnotation.class); HttpServletResponse response = webRequest.getNativeResponse(HttpServletResponse.class); response.setContentType("text/plain;charset=UTF-8"); Person person = (Person) returnValue; response.getWriter().println(personAnnotation.value() + ":" + person); }}

定义controller类

@Controllerpublic class DemoController {
@PersonAnnotation("person") @RequestMapping(value = "/demo", method = RequestMethod.GET) public Person getPerson() { return new Person("xiya", 25); }}

转载地址:http://bdydb.baihongyu.com/

你可能感兴趣的文章
剑指offer 20.顺时针打印矩阵
查看>>
剑指offer 23.从上往下打印二叉树
查看>>
Leetcode C++《热题 Hot 100-21》581.最短无序连续子数组
查看>>
Leetcode C++《热题 Hot 100-22》2.两数相加
查看>>
Leetcode C++《热题 Hot 100-23》3.无重复字符的最长子串
查看>>
Leetcode C++《热题 Hot 100-24》5.最长回文子串
查看>>
Leetcode C++《热题 Hot 100-29》22.括号生成
查看>>
阿里云《云原生》公开课笔记 第四章 理解Pod和容器设计模式
查看>>
阿里云《云原生》公开课笔记 第五章 应用编排与管理
查看>>
阿里云《云原生》公开课笔记 第七章 应用编排与管理:Job和DaemonSet
查看>>
阿里云《云原生》公开课笔记 第八章 应用配置管理
查看>>
Leetcode C++《每日一题》20200625 139. 单词拆分
查看>>
Leetcode C++《每日一题》20200626 338. 比特位计数
查看>>
Leetcode C++ 《拓扑排序-1》20200626 207.课程表
查看>>
Go语言学习Part1:包、变量和函数
查看>>
Go语言学习Part4-1:方法和接口
查看>>
Leetcode Go 《精选TOP面试题》20200628 69.x的平方根
查看>>
leetcode 130. Surrounded Regions
查看>>
【Python】详解Python多线程Selenium跨浏览器测试
查看>>
【JMeter】1.9上考试jmeter测试调试
查看>>