feign交互,个别参数没法传递的问题

环境: spring boot 1.5.9+ feign+eurakespring

客户端代码:app

@Component
@FeignClient("pubcloud-system")
public interface PointInterface {
    @PostMapping("/s/point/handlePointEvent")
    ResultInfo handlePointEvent(@RequestBody ObjectEvent event);
}

服务端代码post

@RestController
@RequestMapping("/s/point")
public class PointServiceController {
    @Autowired
    private PointHandler pointHandler;
    @Autowired
    private PlatformUserPointService platformUserPointService;

    @PostMapping("/handlePointEvent")
    public ResultInfo handlePoint(@RequestBody ObjectEvent pointSupport) throws Exception {
        pointHandler.handle(pointSupport);
        return new ResultInfo(ResultCodeEnum.success);
    }
}

ObjectEvent 类数据以下this

public class ObjectEvent extends ApplicationEvent implements PointSupport {
    private String activeCode;
    private String ObjectId;
    private String userId;
    private long pointNum;
    private String activeDescription;
    private String activeId;
    private String platformCode;
    public ObjectEvent(Object source, String activeCode, String objectId, String userId, String activeDescription) {
        super(source);
        this.activeCode = activeCode;
        ObjectId = objectId;
        this.userId = userId;
        this.activeDescription = activeDescription;
    }

    public ObjectEvent(Object source, String activeCode, String objectId, String userId, String activeDescription, String activeId, String platformCode) {
        super(source);
        this.activeCode = activeCode;
        ObjectId = objectId;
        this.userId = userId;
        this.activeDescription = activeDescription;
        this.activeId = activeId;
        this.platformCode = platformCode;
    }

 //略去get,set方法
}

调用时,发现pointNum的值老是为0;而后就进行了排除;debug

  • 1.排除客户端代码,debug发现pointNum的值不为空
    1. 排除传递过程,使用httpAnalyzer拦截发现poinNum有值
  • 3.使用了postman模拟调用接口,单独传递pointNum,发现服务端报错,fastJson没法实例化类;

这样结果已肯定,fastJson调用了一个非默认的构造器来实例化,那么其余的属性就不会再set了.添加了一个无参默认构造器,pointNum的值就能够正确传递了和接受了code

相关文章
相关标签/搜索