Spring MVC之@RequestMapping属性中consumes、produces的使用讲解。

前言:

我在用postman测试的接口时,碰到一个异常Spring Boot: HttpMediaTypeNotAcceptableException: Could not find acceptable representation,Could not find acceptable representation意思就是找不到可接受的表示形式,根据这个意思我推测是否是postman请求头里的设置的Content-Type和我方法设置的入参的数据格式发生了冲突,沿着这个思路我就对consumes = "application/json"这个属性展开测试,最终问题也定位到这里,这篇文章就讲解下@RequestMapping属性中consumes、produces的使用,并解释这个异常出现的原因。

正文:

1.先简单介绍下请求报文头里的几个属性。

Accept代表发送端(客户端)希望接受的数据类型。 
比如:Accept:text/xml; 
代表客户端希望接受的数据类型是xml类型

Content-Type代表发送端(客户端|服务器)发送的实体数据的数据类型。 
比如:Content-Type:text/html; 
代表发送端发送的数据格式是html。

二者合起来, 
Accept:text/xml; 
Content-Type:text/html 
即代表希望接受的数据类型是xml格式,本次请求发送的数据的数据格式是html。

上面的解释来博客:https://blog.csdn.net/muzizongheng/article/details/46795243

2.然后介绍下@RequestMapping属性中consumes、produces的作用

consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

produces:    指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

3.为什么使用consumes、produces者两个属性?

答:可以针对请求方数据类型来进行访问的控制和过滤。

4.举两个例子

①前端请求Content-Type(请求参数的数据格式):text/plain,后台设置的consumes(控制入参的数据类型)却是application/json,看看会出现什么问题?

请求参数:

请求Content-Type的格式:

controller的方法的截图:

这时候我的Content-Type设置的是text/plain,而方法上consumes设置的却是application/json,结果调用接口就会出现415。

postman异常截图如下:

控制台异常截图:

结果很明显,如果我对入参的数据类型进行限制,你没有按照接口要去来,就会调不通接口,并返回415,数据类型不支持的错误。

②前端请求Content-Type(请求参数的数据格式):application/json,Accept(希望得到的数据类型):text/plain,后台设置的produces(返回的内容类型)却是application/json,看看会出现什么问题?

请求参数:

请求Content-Type的格式和Accept的格式:

controller的方法的截图:

控制台异常截图:

这里出现的异常就是文章开始提到的异常,所以如果你的Accept的数据类型进行了限制,而返回数据类型也不符合,就会出现这个错误。

总结:

我是阿达,一名喜欢分享知识的程序员,时不时的也会荒腔走板的聊一聊电影、电视剧、音乐、漫画,这里已经有六位小伙伴在等你们啦,感兴趣的就赶紧来点击关注我把,哪里不明白或有不同观点的地方欢迎留言。

  • 25
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: @RequestMappingSpring MVC用于处理请求映射的注解,可以用于类或方法上。在类上使用@RequestMapping注解,可以为该类的所有请求映射指定一个基本的URL路径。在方法上使用@RequestMapping注解,可以为该方法指定一个相对于类URL路径的路径。 @RequestMapping注解可以指定请求的HTTP方法、请求路径、请求参数、请求头等信息,用于更加精确地匹配请求。例如: ``` @RequestMapping(value = "/users/{id}", method = RequestMethod.GET) public User getUser(@PathVariable("id") Long id) { // 根据id查询用户信息 return user; } ``` 上面的代码表示处理GET请求,请求路径为/users/{id},其{id}是一个路径变量,用于表示要查询的用户id。在方法使用@PathVariable注解将路径变量映射到方法参数。 除了value和method属性,@RequestMapping注解还支持其他属性,包括params、headers、consumesproduces。params属性用于匹配请求参数,headers属性用于匹配请求头,consumes属性用于匹配请求体的媒体类型,produces属性用于指定响应体的媒体类型。 ### 回答2: @RequestMappingSpring MVC框架的一个注解,用于将HTTP请求映射到处理器方法上。 该注解可以标注在类级别和方法级别上。当标注在类级别上时,表示该类的所有请求都会进入该类的方法进行处理。当标注在方法级别上时,则只有匹配该请求URL的请求才会进入该方法。 @RequestMapping的参数可以用于指定请求的URL路径,支持Ant风格的路径模式。可以使用占位符和正则表达式来匹配动态的URL路径。此外,还可以通过produces和consumes参数来指定请求和响应的媒体类型。 @RequestMapping支持多种HTTP请求方法,包括GET、POST、PUT、DELETE等。可以通过method参数来指定处理该请求的方法,可以是数组形式来处理多个不同的请求方法。 在方法的参数列表,可以使用@RequestParam注解来获取请求的参数值,也可以使用@PathVariable注解来获取URL路径的变量值。还可以使用@RequestBody注解来获取请求体的数据。 使用@RequestMapping可以将不同的URL请求映射到不同的处理器方法上,简化了请求的分发和处理过程。同时,通过合理的配置@RequestMapping,还可以实现RESTful风格的URL设计,提高系统的可维护性和可扩展性。 总结起来,@RequestMappingSpring MVC框架非常重要的一个注解,用于将HTTP请求映射到处理器方法,支持多种请求方法和路径匹配方式,方便开发者进行请求的分发和处理。 ### 回答3: @RequestMappingSpring MVC框架的一个注解,用于定义处理HTTP请求的方法。通过使用@RequestMapping注解,我们可以将一个方法映射到特定的URL路径上,当用户请求这个URL路径时,框架会调用对应的方法来处理请求。 @RequestMapping注解有很多用法,可以用在类级别或方法级别上。在类级别上使用时,它表示该类的所有处理方法都会映射到同一个URL路径上,可以为该类的所有方法指定一个公共的基本路径。 在方法级别上使用@RequestMapping注解时,它可以定义特定的URL路径、HTTP请求方法、请求参数等属性。通过指定URL路径,我们可以将方法映射到对应的URL上;通过指定HTTP请求方法,我们可以限制只有符合请求方法的请求才会被该方法处理;通过指定请求参数,我们可以根据请求参数的条件来匹配要处理的请求。 @RequestMapping注解还支持使用路径变量,通过在URL路径使用占位符,可以动态地将URL的某一部分与方法的参数进行绑定。这样可以方便地对RESTful风格的URL进行处理。 除了@RequestMapping注解外,Spring MVC框架还提供了其他注解,如@GetMapping、@PostMapping等,它们都是对@RequestMapping注解的进一步封装,让代码更加简洁和易读。 总之,@RequestMappingSpring MVC框架非常重要的一个注解,用于定义处理HTTP请求的方法。通过使用@RequestMapping注解,我们可以灵活地映射URL路径、限制HTTP请求方法,方便地处理请求参数,使得我们的程序可以更好地响应用户的请求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开心的码字达

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值