Jersey Json Deserialize - Boolean , Enum

新手第一次接触 通过Jersey搭建RESTFul服务, 在前端传过来的Json转化为POJO的时候遇到了 一些问题, 主要是 Boolean, Enum 的转化。

public class TestDO {
     private boolean isStore;
     private ExecMode mode;
}
enum Execmode {
     HIVE , SHARK
} 

出错的POJO定义如上,传过来的Json为 

{
    "isStore":true,
    "mode":"HIVE"
}
这样总是报错,isStore not marked as ignorable</span>

去掉 isStore, mode 会报错 value not one of declared Enum instance names 等等;

由于第一次接触,不是很熟悉,所以通过各种 stackoverflow 找到了一些原因:
1. boolean类型 deserialize 的时候需要指定它的类型,即加上注释:@JsonDeserialize( as = Boolean.class ), 那声明的时候也只能用 Boolean.
2. enum犯错更低级了,因为HIVE,SHARK的值是 0,1 ,所以Json里对应字段的值应该是 0,1, 而不是HIVE,SHARK字符串, 如果要传字符串的形式(能够很好理解含义,一般这种方式吧),需要对enum定义做出修改如下:

<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">enum ExecMode {</span>
    HIVE("HIVE"),
    SHARK("SHARK");

    private final String value;

    @JsonCreator
    private ExecMode(final String description) {
        this.value = description;
    }

    @JsonValue
    final String value() {
        return this.value;
    }
}

将HIVE,SHARK的值指定为字符串,然后在构造函数,value函数分别加上 @JsonCreator, @JsonValue的注释

 
通过上述的修改, 前段传输 :
<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">{</span>
    "isStore":true,
    "mode":"HIVE"
}
</pre><pre name="code" class="html">
</pre><pre name="code" class="html"><span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">就不会有问题了。</span>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值