修复JSONBeanParser在遇到List时没有被正确递归问题

This commit is contained in:
Looly
2023-07-20 23:39:24 +08:00
parent b74f3f1e3e
commit 4624b16751
4 changed files with 63 additions and 73 deletions

View File

@@ -0,0 +1,51 @@
package cn.hutool.json;
import cn.hutool.core.lang.TypeReference;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.junit.Assert;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
/**
* https://gitee.com/dromara/hutool/issues/I7M2GZ
*/
public class IssueI7M2GZTest {
@Data
@AllArgsConstructor
public static class JSONBeanParserImpl implements JSONBeanParser<Object> {
private String name;
private Integer parsed;
@Override
public void parse(final Object object) {
setName("new Object");
setParsed(12);
}
}
@Data
public static class MyEntity<T> {
private List<T> list;
}
@Test
public void toListTest() {
final List<JSONBeanParserImpl> list = new ArrayList<>();
list.add(new JSONBeanParserImpl("Object1", 1));
final MyEntity<JSONBeanParserImpl> entity = new MyEntity<>();
entity.setList(list);
final String json = JSONUtil.toJsonStr(entity);
//Console.log(json);
final MyEntity<JSONBeanParserImpl> result = JSONUtil.toBean(json, new TypeReference<MyEntity<JSONBeanParserImpl>>() {
}, false);
Assert.assertEquals("new Object", result.getList().get(0).getName());
Assert.assertNotNull(result.getList().get(0).getParsed());
Assert.assertEquals(Integer.valueOf(12), result.getList().get(0).getParsed());
}
}

View File

@@ -1,73 +0,0 @@
package cn.hutool.json;
import cn.hutool.core.lang.TypeReference;
import org.junit.Assert;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
/**
* https://gitee.com/dromara/hutool/issues/I7M2GZ
*/
public class issueI7M2GZTest {
public static class JSONBeanParserImpl implements JSONBeanParser {
private String name;
private Boolean isParsed;
public Boolean getParsed() {
return isParsed;
}
public void setParsed(Boolean parsed) {
isParsed = parsed;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public JSONBeanParserImpl() {
}
public JSONBeanParserImpl(String name) {
this.name = name;
}
@Override
public void parse(Object object) {
setParsed(true);
}
}
public static class MyEntity<T> {
private List<T> list;
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
}
@Test
public void toListTest() {
List<JSONBeanParserImpl> list = new ArrayList<>();
list.add(new JSONBeanParserImpl("Object1"));
MyEntity<JSONBeanParserImpl> entity = new MyEntity<>();
entity.setList(list);
String json = JSONUtil.toJsonStr(entity);
MyEntity<JSONBeanParserImpl> result = JSONUtil.toBean(json, new TypeReference<MyEntity<JSONBeanParserImpl>>() {
}, false);
Assert.assertEquals("Object1", result.getList().get(0).getName());
Assert.assertNotNull(result.getList().get(0).getParsed());
}
}