欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JSON parse error: Can not deserialize instance of java.lang.String out of START_OBJECT token; nested exception is com.fasterxml.jackson.databind.JsonM

程序员文章站 2023-01-01 09:44:28
异常信息如下: 我自己的服务去调用别人的服务的时候出现的异常,意思是JSON解析失败,用String类型无法序列化Json对象,先看代码: 三方服务: 我的代码: 因为我是通过Fegin调用另一方服务,因为另一个服务调用的接口的返回参数是 Result,所以,我保持了我的接收参数是  ......

异常信息如下:

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看看能否接收,并且接收到的是什么参数,然后再解析。