You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
提示报错
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean
at com.alibaba.fastjson2.writer.ObjectWriterImplBoolean.write(ObjectWriterImplBoolean.java:25)
at com.alibaba.fastjson2.writer.ObjectWriterAdapter.writeWithFilter(ObjectWriterAdapter.java:577)
at com.alibaba.fastjson2.writer.ObjectWriter3.write(ObjectWriter3.java:63)
at com.alibaba.fastjson2.JSON.toJSONString(JSON.java:3083)
at com.itime.debtdefuse.assets.util.Fastjson2ValueFilterExample.main(Fastjson2ValueFilterExample.java:34)
@author Baoyi Chen
*/
public class Main {
public static void main(String[] args) {
JSON.register(Integer.class, new ObjectWriter() { @OverRide
public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type fieldType, long features) {
Integer value = (Integer) object;
if (value == null) jsonWriter.writeNull(); else jsonWriter.writeString(Long.toString(value));
}
});
JSON.register(BigDecimal.class, new ObjectWriter<BigDecimal>() {
@Override
public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type fieldType, long features) {
BigDecimal value = (BigDecimal) object;
if (value == null) jsonWriter.writeNull(); else jsonWriter.writeString(value.toPlainString());
}
});
Map<String, Long> map = new HashMap<>();
map.put("0", 0L);
String s = JSON.toJSONString(map);
System.out.println(s);
Test t = new Test();
t.setValue(0);
t.setValue1(new BigDecimal("0.11"));
s = JSON.toJSONString(t);
System.out.println(s);
}
public static class Test {
private Integer value;
private BigDecimal value1;
public Integer getValue() {
return value;
}
public BigDecimal getValue1() {
return value1;
}
public void setValue(Integer value) {
this.value = value;
}
public void setValue1(BigDecimal value1) {
this.value1 = value1;
}
}
}
The text was updated successfully, but these errors were encountered:
…ype fields, for issue #3076 (#3077)
* nextIfComma supports ignoring all white space chars, for issue #2164
* Fix ClassCastException caused by using ValueFilter in Boolean/Short type fields, for issue #3076
问题描述
实体中字段为Boolean时 想将对应空值转成“”时报错,
其中active 修饰为public的时候正常,
请问这种情况是设计如此还是存在bug?
补充一下 似乎 Integer也有这个问题,自定义的ObjectWriter 不生效
@DaTa
class User {
public String name;
public Integer age;
private Boolean active;
}
public class Fastjson2ValueFilterExample {
public static void main(String[] args) {
User user = new User("Alice", null, null);
}
提示报错
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean
at com.alibaba.fastjson2.writer.ObjectWriterImplBoolean.write(ObjectWriterImplBoolean.java:25)
at com.alibaba.fastjson2.writer.ObjectWriterAdapter.writeWithFilter(ObjectWriterAdapter.java:577)
at com.alibaba.fastjson2.writer.ObjectWriter3.write(ObjectWriter3.java:63)
at com.alibaba.fastjson2.JSON.toJSONString(JSON.java:3083)
at com.itime.debtdefuse.assets.util.Fastjson2ValueFilterExample.main(Fastjson2ValueFilterExample.java:34)
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONWriter;
import com.alibaba.fastjson2.writer.ObjectWriter;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
/**
@author Baoyi Chen
*/
public class Main {
public static void main(String[] args) {
JSON.register(Integer.class, new ObjectWriter() {
@OverRide
public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type fieldType, long features) {
Integer value = (Integer) object;
if (value == null) jsonWriter.writeNull(); else jsonWriter.writeString(Long.toString(value));
}
});
}
public static class Test {
private Integer value;
private BigDecimal value1;
}
}
The text was updated successfully, but these errors were encountered: