SpringMVC框架Request请求-contentType设置与配置

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

在Http请求中使用Content-type来指定不同格式的请求信息,那么在spring MVC中如何使用它们来映射请求信息呢?

Content-type类型

 常见的媒体格式类型如下:

  •     text/html : HTML格式
  •     text/plain :纯文本格式      
  •     text/xml :  XML格式
  •     image/gif :gif图片格式    
  •     image/jpeg :jpg图片格式 
  •     image/png:png图片格式

   以application开头的媒体格式类型:

  •    application/xhtml+xml :XHTML格式
  •    application/xml     : XML数据格式
  •    application/atom+xml  :Atom XML聚合格式    
  •    application/json    : JSON数据格式
  •    application/pdf       :pdf格式  
  •    application/msword  : Word文档格式
  •    application/octet-stream : 二进制流数据(如常见的文件下载)
  •    application/x-www-form-urlencoded :
    中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)

   上传文件:

  •     multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式

Spring MVC中Content-Type类型信息的使用

先看RequestMapping注解的定义:

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
      String[] value() default {};
      RequestMethod[] method() default {};
      String[] params() default {};
      String[] headers() default {};
      String[] consumes() default {};
      String[] produces() default {};
}

value:  指定请求的实际地址, 比如 /action/info之类。
method:  指定请求的method类型, GET、POST、PUT、DELETE等
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces:    指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
params: 指定request中必须包含某些参数值是,才让该方法处理
headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求

其中,consumes, produces使用content-typ信息进行过滤信息;headers中可以使用content-type进行过滤和判断。

如:

  @RequestMapping(value = "/abc", method = RequestMethod.GET, headers="Referer=http://www.baidu.com/")  
  public void testHeaders(@PathVariable String ownerId, @PathVariable String petId) {      
    // implementation omitted  
  } 

@RequestMapping(value = "/response/ContentType", headers = "Accept=application/json")  
public void response2(HttpServletResponse response) throws IOException {  
    //表示响应的内容区数据的媒体类型为json格式,且编码为utf-8(客户端应该以utf-8解码)  
    response.setContentType("application/json;charset=utf-8");  
    //写出响应体内容  
    String jsonData = "{}";  
    response.getWriter().write(jsonData);  
    // implementation omitted  
}  

 

使用场景


GET、POST方式提交的请求:

Content-type:

1、application/x-www-form-urlencoded:@RequestBody不是必须加的

2、mutipart/form-data:@RequestBody不能处理这种格式

3、其他格式,比如application/json,application/xml等,必须使用@RequestBody来处理

@ResquestBody注解可以使http消息转换器会根据content-type对请求体进行解析

PUT方式提交的请求:

以上1和3的场景都是必须使用@RequestBody来处理的,2场景也是不支持的

如:


$.ajax({
    url:"/login",
    type:"post",
    contentType:"application/json;charset=UTF-8",
    data:JSON.stringify({"name":"test","pass":"123456"})
});
  4、后台接收代码示例

@RequestMapping(value="/login")
@ResponseBody
public ModelAndView loadForm(@RequestBody Login login){
    // implementation omitted  
}

 

转载于:https://my.oschina.net/guoshuyun/blog/831472

你可能感兴趣的:(SpringMVC框架Request请求-contentType设置与配置)