This commit is contained in:
Looly 2022-02-13 19:09:36 +08:00
parent cedbc88571
commit c83e2ce380
4 changed files with 67 additions and 6 deletions

View File

@ -266,7 +266,6 @@ public class ConverterRegistry implements Serializable {
} }
} }
// 特殊类型转换包括CollectionMap强转Array等 // 特殊类型转换包括CollectionMap强转Array等
final T result = convertSpecial(type, rowType, value, defaultValue); final T result = convertSpecial(type, rowType, value, defaultValue);
if (null != result) { if (null != result) {

View File

@ -7,8 +7,8 @@ import java.io.Serializable;
/** /**
* 用于定义{@code null}与Javascript中null相对应<br> * 用于定义{@code null}与Javascript中null相对应<br>
* Java中的{@code null}值在js中表示为undefined * Java中的{@code null}值在js中表示为undefined
* @author Looly
* *
* @author Looly
*/ */
public class JSONNull implements Serializable { public class JSONNull implements Serializable {
private static final long serialVersionUID = 2633815155870764938L; private static final long serialVersionUID = 2633815155870764938L;

View File

@ -743,7 +743,7 @@ public class JSONUtil {
return jsonConfig.isIgnoreNullValue() ? null : JSONNull.NULL; return jsonConfig.isIgnoreNullValue() ? null : JSONNull.NULL;
} }
if (object instanceof JSON // if (object instanceof JSON //
|| JSONNull.NULL.equals(object) // || ObjectUtil.isNull(object) //
|| object instanceof JSONString // || object instanceof JSONString //
|| object instanceof CharSequence // || object instanceof CharSequence //
|| object instanceof Number // || object instanceof Number //

View File

@ -0,0 +1,62 @@
package cn.hutool.json;
import cn.hutool.core.collection.ListUtil;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.junit.Assert;
import org.junit.Test;
import java.beans.Transient;
import java.util.List;
import java.util.stream.Stream;
/**
* https://github.com/dromara/hutool/issues/2131<br>
* 字段定义成final意味着setCollections无效因此JSON转Bean的时候无法调用setCollections注入所以是空的
*/
public class Issue2131Test {
@Test
public void strToBean() {
GoodsResponse goodsResponse = new GoodsResponse();
GoodsItem apple = new GoodsItem().setGoodsId(1L).setGoodsName("apple").setChannel("wechat");
GoodsItem pear = new GoodsItem().setGoodsId(2L).setGoodsName("pear").setChannel("jd");
final List<GoodsItem> collections = goodsResponse.getCollections();
Stream.of(apple, pear).forEach(collections::add);
String jsonStr = JSONUtil.toJsonStr(goodsResponse);
final JSONObject jsonObject = JSONUtil.parseObj(jsonStr);
GoodsResponse result = jsonObject.toBean(GoodsResponse.class);
Assert.assertEquals(0, result.getCollections().size());
}
@Data
static class BaseResponse {
@SuppressWarnings("unused")
@Transient
public final boolean successful() {
return code == 200 || code == 201;
}
private int code = 200;
private String message;
}
@EqualsAndHashCode(callSuper = true)
@Data
static class GoodsResponse extends BaseResponse {
// 由于定义成了final形式setXXX无效导致无法注入
private final List<GoodsItem> collections = ListUtil.list(false);
}
@Data
@Accessors(chain = true)
static class GoodsItem{
private long goodsId;
private String goodsName;
private String channel;
}
}