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

简介: SpringMVC - @RequestJson之HandlerMethodArgumentResolver 从入门到青铜(二)

其原理也非常好了解,其对应的 action 就是“ (父路径) controller/(父路径下方法路经)method ”。因此,在本地服务器上访问方法 http://localhost:8080/controller/method 就会返回(跳转)到“ helloWorld.jsp ”页面。


/**
    params:可以限制请求参数
    param1: 表示请求必须包含名为 param1 的请求参数
    !param1: 表示请求不能包含名为 param1 的请求参数
    param1 != value1: 表示请求包含名为 param1 的请求参数,但其值不能为 value1
    {“param1=value1”, “param2”}: 请求必须包含名为 param1 和param2 的两个请求参数,且 param1 参   数的值必须为 value1
*/
@RequestMapping(value="/handle03",params="stu")
public String handle03(){
    return "success.jsp";
}


二、理解 @RequestParam

用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。(Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)


RequestParam可以接受简单类型的属性,也可以接受对象类型。


实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段。


defaultValue:如果该参数为NULL,则采用此默认值。


public String fun(@Requestparam(value="name", defaultValue="zhangsan") String name)
{}

Ps:在Content-Type: application/x-www-form-urlencoded的请求中, get 方式中queryString的值,和post方式中 body data的值都会被Servlet接受到并转化到Request.getParameter()参数集中,所以@RequestParam可以获取的到。


三、理解 @RequestBody

@RequestBody 注解则是将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。


作用:


1)该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上。


2)再把HttpMessageConverter返回的对象数据绑定到 controller 中方法的参数上。


3)该注解对实体类里嵌套 List<Entity> 也可以解析进去。


使用时机:


A) GET、POST方式提时, 根据request header Content-Type的值来判断:


application/x-www-form-urlencoded, 可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理);

multipart/form-data, 不能处理(即使用@RequestBody不能处理这种格式的数据);

其他格式, 必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理);


B) PUT方式提交时, 根据request header Content-Type的值来判断:


application/x-www-form-urlencoded, 必须;multipart/form-data, 不能处理;其他格式必须;


说明:


request的body部分的数据编码格式由header部分的Content-Type指定。


@RequestMapping(value = "user/login")
@ResponseBody
// 将ajax(datas)发出的请求写入 User 对象中
public User login(@RequestBody User user) {   
// 这样就不会再被解析为跳转路径,而是直接将user对象写入 HTTP 响应正文中
    return user;    
}

小总结


当前台界面使用GET或POST方式提交数据时,数据编码格式由请求头的ContentType指定。分为以下几种情况:


application/x-www-form-urlencoded,这种情况的数据@RequestParam、@ModelAttribute可以处理,@RequestBody也可以处理。

multipart/form-data,@RequestBody不能处理这种格式的数据。(form表单里面有文件上传时,必须要指定enctype属性值为multipart/form-data,意思是以二进制流的形式传输文件。)

application/json、application/xml等格式的数据,必须使用@RequestBody来处理。


目录
相关文章
|
5月前
SpringMVC常见组件之HandlerMethodArgumentResolver解析-2
SpringMVC常见组件之HandlerMethodArgumentResolver解析-2
28 0
|
5月前
|
算法 Java API
SpringMVC常见组件之HandlerMethodArgumentResolver解析-1
SpringMVC常见组件之HandlerMethodArgumentResolver解析-1
48 0
SpringMVC - @RequestJson之HandlerMethodArgumentResolver 从入门到青铜(七)
SpringMVC - @RequestJson之HandlerMethodArgumentResolver 从入门到青铜(七)
105 0
|
XML Java 数据格式
SpringMVC - @RequestJson之HandlerMethodArgumentResolver 从入门到青铜(六)
SpringMVC - @RequestJson之HandlerMethodArgumentResolver 从入门到青铜(六)
91 0
|
XML Java 数据格式
SpringMVC - @RequestJson之HandlerMethodArgumentResolver 从入门到青铜(五)
SpringMVC - @RequestJson之HandlerMethodArgumentResolver 从入门到青铜(五)
129 0
|
JSON Dubbo Java
SpringMVC - @RequestJson之HandlerMethodArgumentResolver 从入门到青铜(四)
SpringMVC - @RequestJson之HandlerMethodArgumentResolver 从入门到青铜(四)
269 0
|
前端开发 API 数据安全/隐私保护
SpringMVC - @RequestJson之HandlerMethodArgumentResolver 从入门到青铜(三)
SpringMVC - @RequestJson之HandlerMethodArgumentResolver 从入门到青铜(三)
169 0
SpringMVC - @RequestJson之HandlerMethodArgumentResolver 从入门到青铜(三)
|
JSON 前端开发 JavaScript
SpringMVC - @RequestJson之HandlerMethodArgumentResolver 从入门到青铜(一)
SpringMVC - @RequestJson之HandlerMethodArgumentResolver 从入门到青铜(一)
250 0
SpringMVC - @RequestJson之HandlerMethodArgumentResolver 从入门到青铜(一)
|
缓存 数据格式 Java
SpringMVC之分析HandlerMethodArgumentResolver请求对应处理器方法参数的解析过程(一)
在我们做Web开发的时候,会提交各种数据格式的请求,而我们的后台也会有相应的参数处理方式。SpringMVC就为我们提供了一系列的参数解析器,不管你是要获取Cookie中的值,Header中的值,JSON格式的数据,URI中的值。
2367 0
|
5月前
|
设计模式 前端开发 JavaScript
Spring MVC(一)【什么是Spring MVC】
Spring MVC(一)【什么是Spring MVC】