本文主要是介绍坑——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;@Overridepublic 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\",\"e\":\"XXXXXX\"}";
改为,String s = "{\"abc\":\"TEST\"}";
如果使用枚举中不存在的数值,则会直接抛出异常:
字符串改为,String s = "{\"abc\":\"TEST\",\"e\":100}";
改成对象也是一样的错误:
String s = "{\"abc\":\"TEST\",\"e\":{}}";
String s = "{\"abc\":\"TEST\",\"e\":{\"e\":1}}";
可以看到,不管何种情况,JSONObject都会获得对应的值,但是转换成java对应的对象时就会有不同结果,主要注意这个地方,尤其字符串来自未知的地方;
这篇关于坑——fastjson将字符串转到带枚举的java对象的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!