Post 杰里西·杰克逊大十进制邮报

Post 杰里西·杰克逊大十进制邮报,post,jersey,jackson,bigdecimal,Post,Jersey,Jackson,Bigdecimal,我遇到了一个问题。我不能在自己的类中正确使用BigDecimal来执行post操作。希望得到建议 使用Jersey 2.x,Jackson 1.8 我的班级 public final class TestModel{ private BigDecimal ffff; public BigDecimal getFfff() { return ffff; } public void setFfff(BigDecimal ffff) {

我遇到了一个问题。我不能在自己的类中正确使用BigDecimal来执行post操作。希望得到建议 使用Jersey 2.x,Jackson 1.8

我的班级

public final class TestModel{

    private BigDecimal ffff;

    public BigDecimal getFfff() {
        return ffff;
    }

    public void setFfff(BigDecimal ffff) {
        this.ffff = ffff;
    }

    public void setFfff(double ffff) {
        this.ffff = new BigDecimal(ffff).setScale(2, RoundingMode.HALF_EVEN);
    }

}
试着做一些简单的动作

@POST
@Path("/test")
@Consumes(MediaType.APPLICATION_JSON)
public Response test(TestModel tt) {
    log.entry();
    log.info(tt);               
    log.exit();
    return Response.status(201).entity("").build();
}
但结果我得到了 {ClientResponse{method=POST,uri=http://somehost:8080/test,状态=400,原因=Bad请求}

让方法正常工作。如果我试图让BigDecimal的post也能正常工作,那么当我尝试将BigDecimal放在自己的类中,然后尝试使用它进行post时,问题就出现了。

问题解决了。 问题是,我有两个setter方法。当我执行post操作时,jackson将变量反序列化为BigDecimal,但尝试将setter用于double。 解决方案是将setter重命名为double或使用自己的反序列化


但我不知道哪种解决方案更好。

TestModel应该来自哪里?是路径参数、查询参数还是表单参数。您需要告诉Jersey从哪里获取它。还要检查您发布的json值,确保其格式正确。最后,向Jersey注册一个LoggingFilter,以便您可以准确跟踪发生了什么ng on..我遵循了这个例子,post参数没有任何定义。是否有必要使用注释&为什么感谢logginFilter去检查,每天学习新的东西。我从来没有像那样使用过@post。谢谢你的教育!
public class TestDeser extends JsonDeserializer<Double> {
    @Override
    public Double deserialize(JsonParser jp, DeserializationContext dc) throws IOException, JsonProcessingException {
        return jp.getDoubleValue();      
    }
 @JsonDeserialize(using = TestDeser.class)
public void setCheat(double cheat) {
    this.cheat = new BigDecimal(cheat).setScale(2,RoundingMode.HALF_EVEN);
}