Closed shentuzhigang closed 8 months ago
简要描述您碰到的问题。 当@type不是json中第一个field时 autoType无法工作。
请填写以下信息:
如何操作可以重现该问题:
xxx.xxx
...
//可在此输入示例代码
public class Tests {
private static final Filter autoTypeFilter = JSONReader.autoTypeFilter( // 按需加上需要支持自动类型的类名前缀,范围越小越安全 "cn.shentuzhigang.niwan" ); @Data public class SinaQrCodeAuthentication { public SinaQrCodeAuthentication() { } public SinaQrCodeAuthentication(String qrid, String qrcode) { this.qrid = qrid; this.qrcode = qrcode; } /** * 二维码id */ private String qrid; /** * 二维码 */ private String qrcode; } @Test public void test() throws Exception { SinaQrCodeAuthentication person = new SinaQrCodeAuthentication("1", "2"); String jsonString = JSON.toJSONString(person, JSONWriter.Feature.WriteClassName); System.out.println(jsonString); Object object = JSON.parseObject(jsonString, Authentication.class, autoTypeFilter); System.out.println(object);
// bug start Object object1 = JSON.parseObject("{\"qrcode\":\"2\",\"@type\":\"cn.shentuzhigang.niwan.test.Tests$SinaQrCodeAuthentication\",\"qrid\":\"1\"}", Authentication.class, autoTypeFilter); System.out.println(object1); } }
but
{"@type":"cn.shentuzhigang.niwan.test.Tests$SinaQrCodeAuthentication","qrcode":"2","qrid":"1"} Tests.SinaQrCodeAuthentication(qrid=1, qrcode=2) {"qrcode":"2","@type":"cn.shentuzhigang.niwan.test.Tests$SinaQrCodeAuthentication","qrid":"1"}
### 期待的正确结果 *对您期望发生的结果进行清晰简洁的描述。* ### 相关日志输出 *请复制并粘贴任何相关的日志输出。* #### 附加信息 *如果你还有其他需要提供的信息,可以在这里填写(可以提供截图、视频等)。*
设计就是这样的,在未来也不会支持
问题描述
简要描述您碰到的问题。 当@type不是json中第一个field时 autoType无法工作。
环境信息
请填写以下信息:
重现步骤
如何操作可以重现该问题:
xxx.xxx
方法...
数据...
错误public class Tests {
// bug start Object object1 = JSON.parseObject("{\"qrcode\":\"2\",\"@type\":\"cn.shentuzhigang.niwan.test.Tests$SinaQrCodeAuthentication\",\"qrid\":\"1\"}", Authentication.class, autoTypeFilter); System.out.println(object1); } }
{"@type":"cn.shentuzhigang.niwan.test.Tests$SinaQrCodeAuthentication","qrcode":"2","qrid":"1"} Tests.SinaQrCodeAuthentication(qrid=1, qrcode=2) {"qrcode":"2","@type":"cn.shentuzhigang.niwan.test.Tests$SinaQrCodeAuthentication","qrid":"1"}