2019-06-21 16:37:23 [http-nio-8003-exec-1] ERROR c.r.s.t.h.ExceptionHandler - >>>>>>>>> 全局异常 Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported >>>>>>>>>>>>>>
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:237)
at
Postman测试
GET请求:127.0.0.1:9052/api/admin/sysUser/loginWms/shen/111
报上面的错。
场景:admin登录模块调用oms模块提供的接口。
1. oms提供的接口:
@FeignClient("sat-oms")
public interface WarehouseApi {
@RequestMapping(value = "/api/warehouse/getWarehouse",method = RequestMethod.POST)
WarehouseLongInVO get(Long id);
}
实现类
@Override
public WarehouseLongInVO get(@RequestBody Long id) {
return new WarehouseDTO();
}
2. admin登录模块的:
@RestController
@RequestMapping("/sysUser/")
public class LoginController {
@GetMapping("loginWms/{userName}/{password}")
public BaseResultVo loginWms(@PathVariable("userName") String userName, @PathVariable("password") String password , HttpServletRequest request, HttpServletResponse response) {
SysUserDTO sysUserDTO = new SysUserDTO();
sysUserDTO.setPassword(password);
sysUserDTO.setUserName(userName);
return loginService.login(userName, password, request, response, SysResourcesEnum.CategoryEnum.wms.getValue());
}
}
@Override
public BaseResultVo login(String userName, String password, HttpServletRequest request, HttpServletResponse response ,String type) {
.........
SysUserBO sysUserBO = new SysUserBO();
if ("WMS".equals(type)){
List<Long> ids= sysResourcesDao.getById(dbUser.getId());
if (null != ids && !ids.isEmpty()) {
for (Long id : ids) {
WarehouseLongInVO warehouseLongInVO = warehouseApi.get(id);
....
}
......
return BaseResultVo.success(sysUserBO);
}
3. 分析
可以看到admin登录业务模块调用了WarehouseApi.get(), 这个远程服务是由oms提供的。
使用postman测试,127.0.0.1:9052/api/admin/sysUser/loginWms/shen/111,发送get请求,oms控制台报以上错误。
费解了半天,最后发现,自己在postman上做了下面的设置:
header:
Content-Type 设置为application/x-www-form-urlencoded;charset=UTF-8。
但是为什么admin请求设置能到oms模块呢?