Spring MVC 学习笔记 2.1《自定参数解析 HandlerMethodArgumentResolver》
Posted 笑虾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring MVC 学习笔记 2.1《自定参数解析 HandlerMethodArgumentResolver》相关的知识,希望对你有一定的参考价值。
Spring MVC 学习笔记 2.1《自定参数解析 HandlerMethodArgumentResolver》
自定义对象
@Data
public class Hero
private Long id;
private String name;
private int age;
private List<Poem> poems;
public Hero(String name, int age) this.name = name;this.age = age;
解析 Hero 类型参数
继承 HandlerMethodArgumentResolver
@Component
public class HeroArgumentResolver implements HandlerMethodArgumentResolver
@Override
public boolean supportsParameter(MethodParameter parameter)
// 返回 true 的则进入 resolveArgument 处理。
return Hero.class == parameter.getParameterType();
@Override
public Object resolveArgument(MethodParameter parameter, // 当前参数对象
ModelAndViewContainer mavContainer,
NativeWebRequest webRequest,
WebDataBinderFactory binderFactory)
// 根据需要可以拿 request, response 进行操作
HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
HttpServletResponse response = webRequest.getNativeResponse(HttpServletResponse.class);
// 取参数
Integer age = Optional.ofNullable(request.getParameter("age")).map(Integer::parseInt).orElse(18);
String name = Optional.ofNullable(request.getParameter("name")).orElse("耀眼的笨笨");
// 按需求自定封装参数对象。
Hero hero =new Hero(name, age);
// Controller 中收到的参数就是这个返回值。
return hero;
注册解析器
@Configuration
public class WebConfig implements WebMvcConfigurer
@Autowired
HeroArgumentResolver heroArgumentResolver;
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers)
argumentResolvers.add(heroArgumentResolver);
参考资料
Spring文档:Interface HandlerMethodArgumentResolver
阿里云-开发者社区-李振良:SpringMVC源码总结(九)HandlerMethodArgumentResolver介绍
以上是关于Spring MVC 学习笔记 2.1《自定参数解析 HandlerMethodArgumentResolver》的主要内容,如果未能解决你的问题,请参考以下文章
Spring MVC 学习笔记 --- [SpringMVC的几个注解标签说明,获取请求数据,springmvc提供的中文乱码过滤配置]