異常信息如下:
JSON parse error:
Can not deserialize instance of java.lang.String out of START_OBJECT token;
nested exception is com.fasterxml.jackson.databind.JsonMappingException:
Can not deserialize instance of java.lang.String out of START_OBJECT token
at [Source: java.io.PushbackInputStream@7d1ef454; line: 1, column: 39]
(through reference chain: com.chehejia.aisp.core.result.Result["data"])
我自己的服務去調用別人的服務的時候出現的異常,意思是JSON解析失敗,用String類型無法序列化Json對象,先看代碼:
三方服務:
@ApiOperation("下訂單") @PostMapping("/orders") @ApiResponses({ @ApiResponse(code = MusicCode.MUSIC_VIP_PRODUCT_NOT_EXIST_CODE, message = MusicCode.MUSIC_VIP_PRODUCT_NOT_EXIST_DESC), @ApiResponse(code = MusicCode.MUSIC_VIP_ORDER_CODE_IS_REPEAT_CODE, message = MusicCode.MUSIC_VIP_ORDER_CODE_IS_REPEAT_DESC)} ) public Result<String> addOrders(@Valid @RequestBody OrderForm form) { VipProduct vipProduct = vipService.getVipProductByProdCode(form.getProdCode()); if(vipProduct==null){ return Results.failure(MusicCode.MUSIC_VIP_PRODUCT_NOT_EXIST); }
我的代碼:
/**
* @Author: 保密哈哈
* @Description:
* @Date: 2019/6/4 15:40
* @Modified By:
*/
@FeignClient("保密-保密-hmi")
public interface CompensationOrderService {
/** * 音樂服務下單 * @param form * @return */ @PostMapping(value = "/保密/保密/保密/orders") @ResponseBody Result<String> addOrders(@Valid @RequestBody OrderForm form, @RequestHeader(value = "保密-Token")String token, @RequestHeader(value = "X-保密-Deviceid")String deviceid);
因為我是通過Fegin調用另一方服務,因為另一個服務調用的接口的返回參數是 Result<String>,所以,我保持了我的接收參數是 Result<String>, 我天真的認為只要完全保持一致就可以,實際上是不行的,傳過來的是個Json,所以String是無法解析的,除非是JSon形式的字符串,可行的方法是先用超類Object看看能否接收,並且接收到的是什么參數,然后再解析。