Open Asamiyaa opened 2 years ago
经过测试将输入日期字符串改成2022-05-02 输出测试正常,这是测试代码。 @Test(timeout = 4000) public void testToJSONStringToJavaObject() throws Throwable { JSONObject jsonObject = new JSONObject(); jsonObject.put("kprq","2022-05-02"); JSONObject targetObject = new JSONObject(); targetObject.put("billDate", jsonObject.get("kprq")); assertEquals(JSON.toJSONString(targetObject.toJavaObject(TTTT.class)),"{\"billDate\":\"2022-05-02\"}"); }
@Test public void testToJSONStringToJavaObject() throws Throwable { JSONObject jsonObject = new JSONObject(); jsonObject.put("kprq","20220502"); JSONObject targetObject = new JSONObject(); targetObject.put("billDate", jsonObject.get("kprq")); Assertions.assertEquals(JSON.toJSONString(targetObject.toJavaObject(TTTT.class)),"{\"billDate\":\"20220502\"}"); }
@Getter @Setter @NoArgsConstructor class TTTT {
@JSONField(format = "yyyyMMdd") private Date billDate;
}
这个转换有问题。 Expected :{"billDate":"19700101"} Actual :{"billDate":"20220502"}
fastjson 1.2.41 升级1.2.83 问题: 用例: `
@Data public static class MyObject{
private Date beginDate;
}
JSONObject jsonObject = new JSONObject(); jsonObject.put("beginDate","20201130114323284"); MyObject myObject = JSON.toJavaObject(jsonObject,MyObject.class); System.out.println(myObject); `
1.2.83 不正常 beginDate=Sun May 01 15:45:23 CST 642118 1.2.41 正常 beginDate=Mon Nov 30 11:43:23 CST 2020
@lhwzds 确认一下下面代码:
String input;
if (value instanceof String
&& JSONValidator.from(((String) value))
.validate())
{
input = "\"" + value + "\""; //这是我修复临时改的代码
} else {
input = JSON.toJSONString(value);
}
DefaultJSONParser parser = new DefaultJSONParser(input);
fieldDeser.parseField(parser, object, paramType, null);
continue;
应该是最近版本优化了性能,原来是无论是不是String,都会toJsonString,当是String的时候,会多拼一个引号,后面解析的时候会认为是字符串,走日期格式解析,如果没有引号,认为是int类型,就不会走解析了,这个问题以前是没有的,80以后的版本才有,应该是bug
@gtxhdn 原来是这个原因,理解了
这个bug不修复了吗,就这样一直存在?
1.2.83.fix0617 换成上面这个已修复该bug的版本 […](#) 在 2022年10月14日,09:59,wangjianhua1 ***@***.***> 写道: 这个bug不修复了吗,就这样一直存在? — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.
这个版本没有发布呢,仓库里下载不下来
23年了还没修复吗
public static void main(String[] args) {
}
@Getter @Setter @NoArgsConstructor public class TTTT {
@JSONField(format = "yyyy-MM-dd") private Date billDate;
}