mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
修复xml转json再转bean失败问题
This commit is contained in:
@@ -211,7 +211,7 @@ public class JSONConverter implements Converter {
|
||||
}
|
||||
|
||||
// 尝试转Bean
|
||||
if (BeanUtil.isBean(rawType)) {
|
||||
if (BeanUtil.isWritableBean(rawType)) {
|
||||
// issue#I5WDP0 对于Kotlin对象,由于参数可能非空限制,导致无法创建一个默认的对象再赋值
|
||||
if(KClassUtil.isKotlinClass(rawType) && json instanceof JSONGetter){
|
||||
return KClassUtil.newInstance(rawType, new JSONGetterValueProvider<>((JSONGetter<String>)json));
|
||||
|
53
hutool-json/src/test/java/org/dromara/hutool/json/Issue3139Test.java
Executable file
53
hutool-json/src/test/java/org/dromara/hutool/json/Issue3139Test.java
Executable file
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Copyright (c) 2023 looly(loolly@aliyun.com)
|
||||
* Hutool is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
package org.dromara.hutool.json;
|
||||
|
||||
import lombok.Data;
|
||||
import org.dromara.hutool.core.lang.Console;
|
||||
import org.dromara.hutool.core.util.XmlUtil;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class Issue3139Test {
|
||||
@Test
|
||||
public void toBeanTest() {
|
||||
final String xml = "<r>\n" +
|
||||
" <c>\n" +
|
||||
" <s>1</s>\n" +
|
||||
" <p>str</p>\n" +
|
||||
" </c>\n" +
|
||||
"</r>";
|
||||
|
||||
final JSONObject jsonObject = XmlUtil.xmlToBean(XmlUtil.parseXml(xml).getDocumentElement(), JSONObject.class);
|
||||
final R bean = jsonObject.toBean(R.class);
|
||||
Assertions.assertNotNull(bean);
|
||||
|
||||
final List<C> c = bean.getC();
|
||||
Assertions.assertEquals(1, c.size());
|
||||
Assertions.assertEquals("1", c.get(0).getS());
|
||||
Assertions.assertEquals("str", c.get(0).getP());
|
||||
}
|
||||
|
||||
@Data
|
||||
static class C {
|
||||
String s;
|
||||
String p;
|
||||
}
|
||||
|
||||
@Data
|
||||
static class R {
|
||||
List<C> c;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user