方法一:

 本人为调用dubbo 接口,返回一个HashMap<Object,List<Student>>对象, 在反序列化map的时候出现问题,

 解决方法为 把返回的对象封装成对象 再返回

方法二: 人家提供的一个方法

传输的数据为

@Data
public class ResultBean implements Serializable {
    private static final long serialVersionUID = 7316712281088805027L;
    /**
     * 返回标识 正常返回为正数 异常为负数
     */
    private Integer code;
    /**
     * 返回文字描述
     */
    private String message;
    /**
     * 返回数据
     */
    private Serializable result;

    public ResultBean() {
    }

    public ResultBean(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public ResultBean(Integer code, String message, Serializable result) {
        this.code = code;
        this.message = message;
        this.result = result;
    }
}

dubbo provider 代码

    @Override
    public ResultBean resultBean() {
        HashMap<String, Object> map = new HashMap<>();
        map.put("username", "xiaoyong");
        return new ResultBean(1, "hello world", map);
    }

dubbo consumer 调用resultBean 时 会报一下错误

Caused by: com.alibaba.com.caucho.hessian.io.HessianProtocolException: com.alibaba.com.caucho.hessian.io.ObjectDeserializer: unexpected object java.lang.String (username)
    at com.alibaba.com.caucho.hessian.io.AbstractDeserializer.error(AbstractDeserializer.java:131)
    at com.alibaba.com.caucho.hessian.io.AbstractDeserializer.readMap(AbstractDeserializer.java:111)
    at com.alibaba.com.caucho.hessian.io.AbstractDeserializer.readMap(AbstractDeserializer.java:119)
    at com.alibaba.com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2093)
    at com.alibaba.com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2074)
    at com.alibaba.com.caucho.hessian.io.JavaDeserializer$ObjectFieldDeserializer.deserialize(JavaDeserializer.java:406)

原因是 ObjectDeserializer这个类没有实现readMap方法 解决方法 重写 ObjectDeserializer

package com.alibaba.com.caucho.hessian.io;

import java.io.IOException;

public class ObjectDeserializer extends AbstractDeserializer {
    private Class _cl;
    private MapDeserializer mapDeserializer; // 新加的代码

    public ObjectDeserializer(Class cl) {
        _cl = cl;
        mapDeserializer = new MapDeserializer(cl); // 新加的代码
    }

    /** 新加的代码 begin */
    @Override
    public Object readMap(AbstractHessianInput in) throws IOException {
        return readMap(in, null, null);
    }

    @Override
    public Object readMap(AbstractHessianInput in, Class<?> expectKeyType, Class<?> expectValueType) throws IOException {
        return this.mapDeserializer.readMap(in, expectKeyType, expectValueType);
    }
    /** 新加的代码 end */

    @Override
    public Class getType() {
        return _cl;
    }

    @Override
    public Object readObject(AbstractHessianInput in) throws IOException {
        return in.readObject();
    }

    @Override
    public Object readObject(AbstractHessianInput in, String[] fieldNames) throws IOException {
        throw new UnsupportedOperationException(String.valueOf(this));
    }

    @Override
    public Object readList(AbstractHessianInput in, int length) throws IOException {
        throw new UnsupportedOperationException(String.valueOf(this));
    }

    @Override
    public Object readLengthList(AbstractHessianInput in, int length) throws IOException {
        throw new UnsupportedOperationException(String.valueOf(this));
    }

    @Override
    public String toString() {
        return getClass().getSimpleName() + "[" + _cl + "]";


参考链接:https://www.jianshu.com/p/9ac316fae3ae

01-09 21:00