坑——fastjson将字符串转到带枚举的java对象

fastjson将不同的字符串转换成带枚举的java对象时,不同的字符串值转换成java对象的结果不同;

测试用fastjson版本:

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>fastjson</artifactId>

<version>1.2.83</version>

</dependency>

 测试用的java对象:

package test;

public enum E {

	AAA,
	BBB;
}
package test;

public class A {

	public String abc;
	public E e;
	@Override
	public String toString() {
		return "A [abc=" + abc + ", e=" + e + "]";
	}
	
}

测试类:

package test;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

public class Test {

	public static void main(String[] args) {
		System.out.println("start");
		String s = "{\"abc\":\"TEST\",\"e\":\"AAA\"}";
		JSONObject jobj = JSON.parseObject(s);
		System.out.println(jobj.get("e"));		
		A a = JSON.toJavaObject(jobj, A.class);
		System.out.println(a);
	}

}

正常使用枚举的值字符串状态可以正常转换:

使用枚举中的数值也可以正常转换:

例如使用数值1,String s = "{\"abc\":\"TEST\",\"e\":1}";

但是使用枚举中不存在的字符串,就会返回null,没有该枚举的值也是null:

字符串改为,String s = "{\"abc\":\"TEST\",

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值