博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring-boot 自定义解析器实现参数绑定
阅读量:6757 次
发布时间:2019-06-26

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

背景

在使用spring-boot进行的web开发中,会碰到需要为Controller实现自定义的参数装配,比如说我们在Controller层中定义的方法:其中的TUserEntity往往是我们从Request中根据token解析的,那本文介绍的就是如何实现参数正确匹配。

@RequestMapping("/hello")@ResponseBodypublic Object test(TUserEntity entity) {    // to do     return entity;}

TUserEntity

public classTUserEntity {private int id;private String name;// getter setter}

Application 入口

@SpringBootApplication@ComponentScan(basePackageClasses = Application.class)public class Application {    public static void main(String[] args) {        SpringApplication.run(Application.class,args);    }}

在spring boot中实现拦截器功能

@Componentpublic class MyInterceptor implements HandlerInterceptor {    @Override    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {        //实际情况可能是从request中获得token,继而查找获得用户实体        TUserEntity entity = new TUserEntity();        entity.setId(30);        entity.setName("curry");        httpServletRequest.setAttribute("tUserEntity", entity);        return true;    }    @Override    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {    }    @Override    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {    }}

自定义参数解析器

@Componentpublic class MyArgumentResolver implements HandlerMethodArgumentResolver {    @Override    public boolean supportsParameter(MethodParameter methodParameter) {        return methodParameter.getParameterType().equals(TUserEntity.class);    }    @Override    public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {        return nativeWebRequest.getAttribute("tUserEntity", 0);    }}

以上基本就实现了功能,之后访问可以得到response:

{"id":30,"name":"curry"}
哈哈 我就是库密

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

你可能感兴趣的文章
bitmap
查看>>
image has dependent child images
查看>>
Vim常用的命令
查看>>
redis权限认证及登录
查看>>
判断表是否存在 存储
查看>>
rox + openbox + fbpanel + conky打造又快又稳的桌面
查看>>
“蚁族” 的生活方式画像
查看>>
数据结构概述
查看>>
python自学笔记(二)python基本数据类型之字符串处理
查看>>
springboot1.5升级2.0后遇到的问题
查看>>
Leetcode Word Break II
查看>>
java 8 in action
查看>>
计算机容量及计算分析
查看>>
javascript闭包
查看>>
腻子脚本polyfill
查看>>
IIS与ASP.NET中的线程池
查看>>
win8系统安装.net Framework3.5
查看>>
Shel脚本-初步入门之《04》
查看>>
Nginx入门之两种handler函数的挂载方式
查看>>
polygonZM---> poliygon
查看>>