由于开发中一般使用参数提交方式是json格式,对于单个参数的传递使用无法接收只能自定义参数解析器处理

springmvc的自定义参数解析器实现HandlerMethodArgumentResolver接口并且实现下面两个方法

第一个方法是 是否解析改参数 如果返回true 代表需要处理 则会调用resolveArgument方法进行解析

自定义参数注解(标识注解位置PARAMETER,以及运行时期

实现supportsParameter方法 如果方法中包含该注解返回true

将参数从流中读取出来保存到request请求体中,这样第二次参数解析调用就直接从请求体中获取即可

public class JsonPathArgumentResolver implements HandlerMethodArgumentResolver {private static final String JSON_REQUEST_BODY = "JSON_REQUEST_BODY";@Overridepublic boolean supportsParameter(MethodParameter methodParameter) {return methodParameter.hasParameterAnnotation(JsonParam.class);}@Overridepublic Object resolveArgument(MethodParameter parameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest webRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {String body = getRequestBody(webRequest);Object val = null;try {if (StringUtil.isNotBlank(body)) {JSONObject jsonObject = JSONObject.parseObject(body);val = jsonObject.get(parameter.getParameterAnnotation(JsonParam.class).value());}if (parameter.getParameterAnnotation(JsonParam.class).required() && val == null) {throw new RuntimeException(parameter.getParameterAnnotation(JsonParam.class).value() + "不能为空");}} catch (Exception exception) {if (parameter.getParameterAnnotation(JsonParam.class).required()) {/*返回*/throw exception;}}return val;}private String getRequestBody(NativeWebRequest webRequest) {HttpServletRequest servletRequest = webRequest.getNativeRequest(HttpServletRequest.class);String jsonBody = (String) servletRequest.getAttribute(JSON_REQUEST_BODY);if (jsonBody == null) {try {jsonBody = IOUtils.toString(servletRequest.getInputStream());servletRequest.setAttribute(JSON_REQUEST_BODY, jsonBody);} catch (IOException e) {throw new RuntimeException(e);}}return jsonBody;}}

然后需要装载自定义的参数解析器

最后使用的时候只需要在参数前加上自定义的注解即可获取到传递的json值

springmvc自定义参数解析器相关推荐

  1. springmvc自定义参数解析器/类型转换器

    概述 有些时候我们需要对GET请求的入参做自定义的处理,比较常见的就是字符串反序列化时间类型了,常用的像@DateTimeFormat注解,但是这需要在每个入参的属性上都加上这个注解,比较费手,那么我 ...

  2. springMvc(实现HandlerMethodArgumentResolver)自定义参数解析器

    由于之前用@RequestParam无法接收request payload 正文格式为json格式的字符串,只能使用@RequestBody整个接收,觉得麻烦,但是spring自带的参数解析器不具有这 ...

  3. Spring自定义参数解析器

      虽然Spring提供了比较完善的参数解析器,但是对于一些特殊的数据类型我们还是需要进行特殊处理,这样会提高代码的复杂度,增加冗余的代码,降低代码可读性和可维护性.所以自定义参数解析器是一个很好的解 ...

  4. Spring MVC自定义类型转换器Converter、参数解析器HandlerMethodArgumentResolver

    文章目录 一.前言 二.类型转换器Converter 1.自定义类型转换器 三.参数解析器 1.自定义分页参数解析器 2.自定义注解参数解析器 一.前言 Spring MVC源码分析相关文章已出: S ...

  5. SpringMVC的视图解析器

    文章目录 SpringMVC的自定义视图解析器 [1] SpringMVC的视图解析器 [2] SpringMVC的自定义视图解析器 SpringMVC自定义视图解析器的使用 [1] 目前项目资源的声 ...

  6. spring MVC使用自定义的参数解析器解析参数

    目录 写在前面 编写自定义的参数解析器解析请求参数 项目结构 定义注解 实体类 controller 定义参数解析器 注册参数解析器 启动项目 发起请求查看结果 写在前面 如果还有小伙伴不知道spri ...

  7. SpringMVC 参数解析器

    一.问题 springMVC对于下面这种接口,参数是怎么解析的: @GetMapping("/hello/{id}") public void hello3(@PathVariab ...

  8. SpringBoot--网上商城项目(自定义的参数解析器、购物车后台前台功能、商品详情页)

    目录 一.自定义的参数解析器 关于Mybatis-plus时间字段代码生成问题 报错信息:Caused by: java.lang.IllegalStateException: No typehand ...

  9. springMVC自定义方法属性解析器

    使用场景例子: 用户登陆系统一般会往Session里放置一个VO对象,然后在controller里会来获取用户的userId等信息. 之前的写法是:@SessionAttributes配合@Model ...

最新文章

  1. php rdkafka实例,linux下php扩展kafka的实例分享
  2. 如何使用python批量下载-使用 Python + Selenium 批量下载素材
  3. python世界第一语言_Java 跌落神坛!Python 正式登顶世界第一编程语言
  4. IBM希望其“裁剪”过的Swift能够引诱你使用BlueMix云
  5. gcc 编译器使用指南
  6. IntelliJ IDEA 显示行号方法
  7. Android客户端与服务器之间传递json数据
  8. 怎样修改当前分支最新一次提交的message信息?
  9. 微信小程序上线订单管理功能:实现订单管理、售后维权一体化
  10. 杭电2066一个人的旅行(spfa)
  11. [转] PostgreSQL的PITR技术(Point-In-Time-Recovery)
  12. 39基础数据结构:动态数组
  13. Android机顶盒网络地址端口连通性测试
  14. 史蒂夫·乔布斯谈生命中最重要的东西
  15. [thrift] thrift基本原理及使用
  16. 当黑丝遇上Nginx网站服务(你选谁)
  17. (转)罗振宇跨年演讲:哪来直接登顶的人生,只有不断迭代的历程
  18. Redis 中的 集合(Set) SCARD:获取集合包含的元素数量
  19. domino mysql_IBM domino数据库操作,数据迁移
  20. 【转载】第6节: 六类Calander处理六种不同的时间场景

热门文章

  1. [OfficeExcel] Word+Excel邮件合并 生成多个文档
  2. Python os.symlink创建软链接
  3. Python编程基础:用户输入若干个分数,求所有分数的平均分。每输入一个分数后询问是否继续输入下一个分数,回答“yes”就继续输入下一个分数,回答“no”就停止输入分数。
  4. web ui 套件_复古UI套件
  5. 用python实现多线程爬取影视网站全部视频方法【笔记】
  6. NLP领域表达退化各向异性理解及对应策略总结
  7. matlab光子晶体求反射率,一维光子晶体禁带结构的MATLAB分析计算讲解.PDF
  8. Autodesk Flame 2020 特别版 Mac 交互设计终极视觉特效制作软件
  9. OSChina 周二乱弹 ——有一天你当了程序员巴巴
  10. 学习嵌入式的开发线路,新手怎么学习嵌入式?