一、问题
接口调用时提示json解析报错,如图
二、解决
通过排查发现Fegin调用时出现问题,Fegin调用的代码时这样写的:
employeeFeignClient.addRole(iamOrganizationId,employeeId,roleIds);
Fegin类是这样写的:
@PutMapping("/v1/{iam_organization_id}/organizations/employee/{employee_id}/role")
ResponseEntity<Integer> addRole(@PathVariable("iam_organization_id") Long iamOrganizationId,
@PathVariable("employee_id") Long employeeId,
@RequestBody List<Long> roleList) ;
json报错那可能在 @RequestBody这个参数这里出现问题,对比了调用服务的接口如下:
@Permission(level = ResourceLevel.ORGANIZATION)
@PutMapping("/{employee_id}/role")
@ApiOperation(value = "员工批量添加/修改角色")
public ResponseEntity<Integer> addRole(@PathVariable("iam_organization_id") Long iamOrganizationId,
@PathVariable("employee_id") Long employeeId,
@RequestBody List<Long> roleList) {
return Optional.ofNullable(employeeService.addRole(iamOrganizationId, employeeId, roleList))
.map(flag -> new ResponseEntity<>(flag, HttpStatus.OK))
.orElseThrow(() -> new CommonException(ResponseCode.ERROR_ADD.getDesc()));
}
仔细检查后Fegin类是没问题的,问题出在在fegin调用的时候requestBody参数名字不一样。Fegin类的参数名为roleList,接口调用时候参数名为roleIds,导致报错。将方法里参数名改为跟Fegin类的参数名一样后解决了此问题。
三、结论
Fegin调用时出现JSON报错时,检查Fegin类里与接口调用里的@requestBody参数对应的名字是否一致。
版权声明:本文为tc979907461原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。