Unsupported Media Type","message":"Content type 'application/octet-stream' not supported",

'application/octet-stream' not supported

这段时间在接入某家病虫害检测设备,服务端采用Spring Boot。有这么一个需求,这台设备上传一个数据到服务端,服务端对数据进行处理,但是和厂家沟通的时候,厂家说数据放在RequestBody(请求体)里,于是我就理所当然的用了下面的这种处理方式:

  
    @RequestMapping(value = "/upload", method = RequestMethod.POST)
    public ServerResponse upload(@RequestBody JSONObject param) {
    	logger.info("param: {}", param);
        //这里是业务逻辑
    }

但是在上报数据时候出现了异常:前端报的异常是这个

{"timestamp":"2019-07-03T02:41:42.062+0000","status":415,"error":"Unsupported Media Type","message":"Content type 'application/octet-stream' not supported","path":"/upload"}

后台报的异常是这个:

2019-07-03 10:41:42.045  WARN 17506 --- [http-nio-801-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/octet-stream' not supported]

一看到这个报错我是真懵逼,第一次见,二话不说,直接百度。很赞的是,找到的第一篇博客就是正确的处理方案,源地址在这里。
博客里面说的很清楚,出现这个报错的原因是我用JSONObject接受了RequestBody里的内容,但是RequestBody里的数据是原始的二进制流方式,所以出现了这个错误。
具体的解决方式是把参数类型改为String,这样就解决了。代码如下

	@RequestMapping(value = "/upload", method = RequestMethod.POST)
    public ServerResponse upload(@RequestBody String param) {
        JSONObject object = JSONObject.parseObject(param);
   		//这里是业务逻辑
    }

你可能感兴趣的:(java,IDEA,JAVA,WEB)