SpringMVC - @RequestJson之HandlerMethodArgumentResolver 从入门到青铜(一)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析DNS,个人版 1个月
简介: SpringMVC - @RequestJson之HandlerMethodArgumentResolver 从入门到青铜(一)

JSON回顾,如果是新手,可以简单看看;如果老手勿喷,直接拉到下文从前言开始...


JSON简介

在企业当中,我们都知道为了前后端分离统一,使用开发原则中的“约定大于配置”的原则,甚至团队开发规范、开发编译环境等等也是要大家约定来执行的,提高各自的开发效率。而其中一个特别重要的约定就是前端后端中间彼此传输的数据一般情况都推荐使用JSON格式数据,原因有以下几点:


JAVAScript Object Notation是一种轻量级的数据交换格式。

具有良好的可读和便于快速编写的特性。

业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持)。

JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。 – Json.org

JSON作为数据是目前网络中主流的数据传输格式之一,应用十分广泛,说是使用率达到99%一点也不勉强。

数据格式比较简单, 易于读写, 格式都是压缩的, 占用带宽小。

易于解析这种语言, 客户端JavaScript可以简单的通过eval()进行JSON数据的读取。

因为JSON格式能够直接为服务器端代码使用, 大大简化了服务器端和客户端的代码开发量, 但是完成的任务不变, 且易于维护。

JSON支持的数据类型

JSON里面的数据是以一种键值对的方式存在,("key": "value")中值的类型可以是下面数据类型中的任意一种:


数字(整数或浮点数)

逻辑值(true 或 false)

字符串(在双引号中)

数组(在方括号中)

函数

对象(在大括号中)

null

JSON语法规则

1、基本语法(英文状态):


大括号:{}

中括号:[]

逗号:,

冒号::

双引号:""

2、数据类型:


嵌套对象

数组

字符串

数字

布尔值

空值

3、组合解析:


{} 解析大括号类型

[] 解析中括号类型

{"key": [...]} 解析大括号嵌套中括号类型

[{"key": "value"}] 解析中括号嵌套大括号类型

JSON数据解析

如果看到是{ } => 使用 JSONObject 解析

如果看到的[ ] => 使用 JSONArray 解析

前言

该项目是一个SpringMVC中自定义解析JSON参数的Project,我们都知道Spring传统的解决方案是@RequestBody来解析JSON格式参数,但这样一来,会出现一个很不方便的问题,失去了@RequestParam的特性——自定义分参解析,因为@RequestBody只能一次性全部解析完,这样又会带来一个可读性的问题,如果是多个简单的JSON数据混合在一起的话,只能用Map来接收,这样导致可读性严重下降。所以,@RequestJson的出现就是为了解决这两大问题,也可以这么理解@RequestJson的特性:@RequestJson == @RequestBody + @RequestParam。


在项目中,如果后端要接收前端传来的 json 参数,原 spring 虽然提供了 @RequestBody 注解来封装 json 数据,但局限性也挺大的(因为@RequestBody + @RequestParm无法相辅相成),对参数要么适用 jsonObject 或者 javaBean 类,或者 string。


若使用 jsonObject 接收,对于 json 里面的参数,还要进一步获取解析,很麻烦。

若使用 javaBean 来接收,若接口参数不一样,那么每一个接口都得对应一个javaBean。

若使用 string 来接收,那么也得需要自己解析json参数。

@RequestBody有单体限制的问题

Map解析器优先于自定义解析器的问题

所以就琢磨了一个和GET/POST - JSON提交方式一样,直接在Controller层接口写参数名即可接收对应JSON数据参数值。


运行环境

JDK 1.8

IDEA 2018.3

技术理解

@RequestMapping


@RequestParam


@RequestBody


@PathVariable


HandlerMethodArgumentResolver


一、理解 @RequestMapping


image.pngimage.pngimage.png

image.pngimage.pngimage.png


国际惯例先介绍什么是@RequestMapping,@RequestMapping 是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径;用于方法上,表示在类的父路径下追加方法上注解中的地址将会访问到该方法,此处需注意@RequestMapping用在类上可以没有,但是用在方法上必须有。



@Controller
@RequestMapping(value = "/controllers") // 设置想要跳转的父路径
public class StatisticUserCtrl {
  //如需注入,则写入需要注入的类
  //@Autowired
  // 设置方法下的子路经
  @RequestMapping(value = "/method")
  public String helloworld() {
      return "helloWorld";
  }
}
目录
相关文章
|
4天前
|
XML 前端开发 Java
SpringMVC入门到实战------2、SpringMVC创建实例Hello SpringMVC(maven+tomcat)
这篇文章是SpringMVC框架的入门教程,详细指导了如何在IDEA中使用Maven和Tomcat创建SpringMVC工程,包括添加依赖、配置web.xml、编写控制器、创建配置文件、配置Tomcat服务器以及进行基本的测试,展示了一个简单的Hello SpringMVC示例。
SpringMVC入门到实战------2、SpringMVC创建实例Hello SpringMVC(maven+tomcat)
|
9月前
|
JSON 前端开发 Java
Spring MVC入门必读:注解、参数传递、返回值和页面跳转(下)
Spring MVC入门必读:注解、参数传递、返回值和页面跳转(下)
87 0
SpringMVC入门到实战------5、域对象共享数据 Request、Session、Application、Model、ModelAndView、Map、ModelMap的详细使用及代码实例
这篇文章详细解释了在IntelliJ IDEA中如何使用Mute Breakpoints功能来快速跳过程序中的后续断点,并展示了如何一键清空所有设置的断点。
SpringMVC入门到实战------5、域对象共享数据 Request、Session、Application、Model、ModelAndView、Map、ModelMap的详细使用及代码实例
|
4天前
|
存储 前端开发 Java
SpringMVC入门到实战------1、SpringMVC简介
这篇文章是SpringMVC框架的入门介绍,阐述了MVC架构的概念和分层,解释了SpringMVC作为Spring家族的一部分在Web应用开发中的作用和重要性,并概述了SpringMVC的关键特点,包括与Spring IOC容器的无缝集成、基于Servlet的DispatcherServlet、全面的解决方案、代码简洁性、高内聚低耦合的组件化设计以及卓越的性能表现。
SpringMVC入门到实战------ 十一 拦截器的使用
这篇文章介绍了SpringMVC中拦截器的使用,包括拦截器的配置、拦截器的三个抽象方法`preHandle`、`postHandle`和`afterCompletion`的作用,以及多个拦截器的执行顺序和规则。
SpringMVC入门到实战------ 十一 拦截器的使用
|
1天前
|
JSON 前端开发 JavaScript
SpringMVC入门到实战------九 HttpMessageConverter @RequestBody 、@ResponseBody 、RequestEntity、ResponseEntity
这篇文章详细介绍了SpringMVC中的`HttpMessageConverter`接口及其相关的`@RequestBody`、`@ResponseBody`、`RequestEntity`和`ResponseEntity`注解和类型的使用,包括如何将请求体转换为Java对象、如何将Java对象转换为响应体、以及如何处理JSON和AJAX请求。
SpringMVC入门到实战------九 HttpMessageConverter @RequestBody 、@ResponseBody 、RequestEntity、ResponseEntity
|
3天前
|
缓存 Java 应用服务中间件
SpringMVC入门到实战------七、SpringMVC创建JSP页面的详细过程+配置模板+实现页面跳转+配置Tomcat。JSP和HTML配置模板的差异对比(二)
这篇文章详细介绍了在SpringMVC中创建JSP页面的全过程,包括项目的创建、配置、Tomcat的设置,以及如何实现页面跳转和配置模板解析器,最后还对比了JSP和HTML模板解析的差异。
SpringMVC入门到实战------七、SpringMVC创建JSP页面的详细过程+配置模板+实现页面跳转+配置Tomcat。JSP和HTML配置模板的差异对比(二)
|
3天前
|
XML JSON 数据库
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
这篇文章详细介绍了RESTful的概念、实现方式,以及如何在SpringMVC中使用HiddenHttpMethodFilter来处理PUT和DELETE请求,并通过具体代码案例分析了RESTful的使用。
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
|
3天前
|
前端开发
SpringMVC入门到实战------六、SpringMVC的视图。ThymeleafView、转发视图、重定向视图、视图控制器的使用详解
这篇文章详细介绍了SpringMVC中的视图类型,包括ThymeleafView、转发视图、重定向视图和视图控制器的使用,以及如何通过源码查看确定使用的视图渲染器类型。
SpringMVC入门到实战------六、SpringMVC的视图。ThymeleafView、转发视图、重定向视图、视图控制器的使用详解
SpringMVC入门到实战------十二、异常处理器
这篇文章介绍了SpringMVC中拦截器的使用,包括拦截器的配置、拦截器的三个抽象方法`preHandle`、`postHandle`和`afterCompletion`的作用,以及多个拦截器的执行顺序和规则。