我遇到了一个问题。我无法在自己的课堂上正确使用BigDecimal
来做后期操作。希望得到建议
使用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, status=400, reason=Bad Request}
让方法正常工作。如果我尝试为BigDecimal
发布也有效的帖子,当我尝试将BigDecimal
放入我自己的课程而不是尝试用它发布时问题出现
答案 0 :(得分:0)
问题解决了。 问题是,我有2个setter方法。当我做后期动作时,杰克逊将变量deserilize变量变为BigDecimal,但试图将setter用于double。 解决方案是将setter重命名为double或使用自己的deserilization
的
的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);
}
的 但我不知道哪种解决方案更好。