問題場景:
后端調用feign接口請求, 接口返回異常, no suitable HttpMessageConvert found for response type
問題描述
報錯異常如下:
//根據圖片特征 去查詢人員信息ResultVo<List> personVos = ipbdFaceLibPersonApi.queryFacePersonByFeature(libPersonPageForm);@FeignClient(name = "ipbd-business-manager-app", path = "/lib/facePerson", fallbackFactory = IpbdFaceLibPersonServiceFallback.class)
public interface IpbdFaceLibPersonApi {/**** 根據特征 查詢人像人員信息* @param param* @return*/@ApiOperation(value = "根據特征 查詢人像人員信息")@ResponseBody@RequestMapping("/queryFacePersonByFeature")ResultVo<List<IpbdFaceLibPersonVo>> queryFacePersonByFeature(@RequestBody @ApiParam(value = "param") IpbdFaceLibPersonPageForm param);
}@Api(value = "人員表控制器", tags = {"人員表管理"})
@RestController
@RequestMapping("/lib/facePerson")
@Slf4j
public class IpbdFaceLibPersonController {/*** 根據特征 查詢人像人員信息* @param param* @return*/@ApiOperation(value = "根據特征 查詢人像人員信息")@ResponseBody@RequestMapping("/queryFacePersonByFeature")public ResultVo<List<IpbdFaceLibPersonVo>> queryFacePersonByFeature(@RequestBody @ApiParam(value = "param") IpbdFaceLibPersonPageForm param){List<IpbdFaceLibPersonVo> resultList = ipbdFaceLibPersonService.queryFacePersonByFeature(param);return ResultUtils.success(resultList);}
}
上面代碼是feign接口調用的封裝,以及controller層的封裝,可以看到接口返回的對象是ResultVo<List>,請求接收的對象也是一致的,但是無論怎么請求,接口都返回調用異常,無法convert轉換
原因分析:
通過查看feign源碼發現,所有feign接口請求后的結果都需要經過decode解析, 那么看下返回的對象是否有無法解析的字段。 整個對象類中, 只有時間字段是增加了JsonFormat轉換的,嘗試把時間字段去掉之后,發現不報錯了, 那么問題就出現在時間字段json序列化后decode無法解析的問題了
解決方案:
這里JsonFormat是jackson庫的而JsonField是fastjson的,這里我們換成@JSONField(format = “yyyy-MM-dd HH:mm:ss”)去格式化就正常返回了