JSON parse error: Cannot deserialize instance of java.util.ArrayList<com.sangfor.ngsoc.knowledge.to.UserEntity>
out of START_OBJECT token;
① 首先将knowledge和auth服务都配置进eureka:
eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/
② auth服务的项目路径为:
server: port: 8081 servlet.context-path: /ngso/AUTH/
③ 远程auth服务的接口:
@Api(tags = "用户表") @Slf4j @Validated @RestController @ResponseResult @RequestMapping("/api/v2") public class UserController { @Autowired private IUserService userService; @PostMapping("/users/inner/exact") public PageData<UserEntity> exactPageQueryUserList(@Validated @RequestBody UserQo userQo, @RequestParam(SessionKey.DOMAIN_ID) String domainId) { userQo.setDomainId(domainId); return userService.exactPageQueryUserList(userQo); } }
④ knowledge服务的feign接口,调用远程auth服务的接口:
@FeignClient(name = "AUTH") public interface AuthFeignService { @PostMapping("/ngso/AUTH/api/v2/users/inner/exact") PageData<UserResp> exactPageQueryUserList( @RequestBody UserReqDto userReqDto, @RequestParam(SessionKey.DOMAIN_ID) String domainId); }
⑤ 在knowledge服务中调用feign接口:
@Override public String addDoc() { List<String> userIds = new ArrayList<>(); UserInfo userInfo = UserInfoShareHolder.getUserInfo(); userIds.add(userInfo.getId()); UserReqDto userReqDto = new UserReqDto(userIds); userReqDto.setPageNum(1); userReqDto.setPageSize(1); PageData<UserResp> pageDataApiResponse = authFeignService .exactPageQueryUserList(userReqDto, UserInfoShareHolder.getUserInfo().getDomainId()); }
结果报错:
JSON parse error: Cannot deserialize instance of `java.util.ArrayList<com.sangfor.ngsoc.knowledge.to.UserEntity>` out of START_OBJECT token;
① 首先直接调用auth服务的接口,不使用远程服务:localhost:8081/ngso/AUTH/api/v2/users/inner/exact
比实际的响应数据多了code,message这些信息,说明又对响应数据进行了封装
{ "code": 0, "message": "成功", "data": { "pageNum": 1, "pageSize": 1, "totalCount": 1, "data": [ { "id": "fx-user-fec844b9e0dc0d80000004", "name": "sysadmin", "phone": "", "email": "", "description": "内置用户:默认平台系统管理员账户", "domainId": "fx-domain-fec833bfa0dbcc40000001", "projectId": " ", "enabled": 1, "createTime": "2021-10-18 15:41:17", "updateTime": "2021-10-21 16:35:11", "changeTime": "2021-10-18 16:44:37", "loginTime": "2021-10-21 16:35:11", "options": 0, "builtIn": 1 } ] } }
② 查看代码加上一层封装即可:
@FeignClient(name = "AUTH" ) public interface AuthFeignService { @PostMapping("/ngso/AUTH/api/v2/users/inner/exact") ApiResponse<PageData<UserResp>> exactPageQueryUserList( @RequestBody UserReqDto userReqDto, @RequestParam(SessionKey.DOMAIN_ID) String domainId); }