fastjson2 icon indicating copy to clipboard operation
fastjson2 copied to clipboard

[BUG] JSONArray toJavaList 字段不能被复用

Open hunao0221 opened this issue 1 year ago • 6 comments

问题描述

目标class中的两个不同字段都是用@JSONField 引用同一个字段,其中一个无法被赋值

环境信息

请填写以下信息:

  • OS信息: Apple M1 MacOS 13.4 (22F66)
  • JDK信息: openjdk version "11.0.18" 2023-01-17 LTS
  • 版本信息:Fastjson2 v2.0.33
public class FastJsonTest {

    @Test
    void toJavaList() {
        String data = "[{\"id\":\"1001\",\"name\":\"Jack\"},{\"id\":\"1002\",\"name\":\"Rose\"}]\n";
        JSONArray array = JSONArray.parse(data);
        List<User> userList = array.toJavaList(User.class);
        assertEquals(2, userList.size());
        Optional<User> first = userList.stream().filter(i -> "1001".equals(i.getId())).findFirst();
        assertTrue(first.isPresent());
        User user = first.get();
        assertEquals("1001", user.getId());
        // name 或者nickname会为null, 之前用的版本2.0.25是没问题的
        assertNull(user.getName());
        assertEquals("Jack", user.getNickname());

    }


    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    static class User {
        @JSONField(name = "id")
        private String id;
        @JSONField(name = "name")
        private String name;
        @JSONField(name = "name")
        private String nickname;
    }
}
image

hunao0221 avatar Jun 15 '23 01:06 hunao0221

给下测试用例

yanxutao89 avatar Jun 15 '23 01:06 yanxutao89

@yanxutao89 已提供测试用例

hunao0221 avatar Jun 15 '23 03:06 hunao0221

https://github.com/alibaba/fastjson2/releases/tag/2.0.34 @hunao0221 用这个版本试下

wenshao avatar Jun 18 '23 08:06 wenshao

@wenshao 2.0.34不行,可能我提供的测试用例没说明白, 我的测试用例是证明该bug的存在, 实际上应该通过下面的断言才行。

        assertEquals("Jack", user.getName());
        assertEquals("Jack", user.getNickname());

hunao0221 avatar Jun 19 '23 01:06 hunao0221

is there any updates?

hunao0221 avatar Jul 03 '23 01:07 hunao0221

is there any updates?

试试最新版本

yanxutao89 avatar Feb 05 '24 07:02 yanxutao89

works now, thanks a lot.

hunao0221 avatar Apr 28 '24 09:04 hunao0221