@RequestBody,415Unsupported Media Type错误,解决办法汇总总有一款适合你

       最近在跟ONENET平台对接设备数据的时候,从平台下载的JAVA版本的SDK嵌入到自己的项目中使用,使用POSTMAN测试GET请求的时候是没问题的,测试POST请求接收数据的时候就报了415错误!从网上找了各种解决办法,没有一款是适用我这个项目的,通通没用,后来发现是spring的注解@RequestBody接收数据的问题,后来就替换成原始接收数据的方法就可以了(HttpServletRequest)

       由于SDK用的是BODY来处理的数据,所以我们需要把request中的参数转成字符串body

public String receive(HttpServletRequest request, HttpServletResponse rsp) throws NoSuchPaddingException, InvalidKeyException, NoSuchAlgorithmException, IllegalBlockSizeException, BadPaddingException, InvalidAlgorithmParameterException, IOException {

        BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
        String body = IOUtils.read(reader);

}

IOUtils用的是dubbo-2.5.3

就这样困扰了两天的问题自己发现并自己解决(过程中找过ONNET平台技术员和设备厂商拉了个群聊把问题反馈出来一直没得到解决,最让我无语的是跟我对接的ONNET平台技术员是搞PYTHON,设备厂商的技术员是搞C#的跟他们搞对接真痛苦,因为他们自己的DEMO我不能直接拿来用)

 

下面说说,我这两天在网上找的解决办法,一般下面几种解决办法都足够解决你的问题,实在不行就用我上面的最原始的解决办法:

一、参考的是:https://www.iteye.com/blog/snowolf-1628861

主要就是需要开启XML核心配置

  1.   
  2.   
  3.   

然后pom.xml配置

  
        org.springframework  
        spring-webmvc  
        3.1.2.RELEASE  
        jar  
        compile  
      
      
        org.codehaus.jackson  
        jackson-mapper-asl  
        1.9.8  
        jar  
        compile  
      
      
        log4j  
        log4j  
        1.2.17  
        compile  
      

二、参考的是https://blog.csdn.net/jdk_wangtaida/article/details/85783289

@requestBody注解的使用

1、@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。一般情况下来说常用其来处理application/json类型。

2. @RequestBody接收的是一个Json对象的字符串,而不是一个Json对象

解决方案:前端传参数时,设置content-type类型就可以啦,设置成application/json
三、参考的是https://blog.csdn.net/g_y_x_/article/details/84339648

主要说的是检查JAR包和配置的问题

1.maven引入jackson包,共3个【重要】
jackson-core
jackson-databind
jackson-annotations

2.springmvc的配置文件【重要】

  

3.没有自动将包导入WEB-INF/lib中

四、这里说的是没有使用浏览器请求,被拒POSTMAN没有模拟浏览器POST

我一个同事说使用swagger测是不会包415的,是正常的

使用模拟浏览器工具测试

五、说的是JAR包不一致导致的

六、说的是spring3.0和spring4.0使用的差距

3.0的是

MappingJacksonHttpMessageConverter

4.0的是

MappingJackson2HttpMessageConverter

		
			
			
			
			
			
			
		
	

 

你可能感兴趣的:(JAVA,spring,415,@RequestBody,JAVA)