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

@ -135,7 +135,7 @@ public class ConverterRegistry implements Serializable {
ServiceLoaderUtil.load(Converter.class).forEach(converter -> {
try {
Type type = TypeUtil.getTypeArgument(ClassUtil.getClass(converter));
if(null != type){
if (null != type) {
putCustom(type, converter);
}
} catch (Exception e) {
@ -266,7 +266,6 @@ public class ConverterRegistry implements Serializable {
}
}
// 特殊类型转换包括CollectionMap强转Array等
final T result = convertSpecial(type, rowType, value, defaultValue);
if (null != result) {

View File

@ -7,10 +7,10 @@ import java.io.Serializable;
/**
* 用于定义{@code null}与Javascript中null相对应<br>
* 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;
/**
@ -35,7 +35,7 @@ public class JSONNull implements Serializable{
/**
* Get the "null" string value.
*获得null字符串
* 获得null字符串
*
* @return The string "null".
*/

View File

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