'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);
//这里是业务逻辑
}