我有这样的房产:
@CatalogExportField(columnName = "K", headerName = "catalog name")
private Boolean mpAvailable;
我需要在其他类
中解析时将其作为字符串 private CatalogExportDto convert(Variant variant, boolean willHaveProductTypeFields) {
CatalogExportDto dto = new CatalogExportDto()
.setMpAvailable(variant.isMpAvailable())
但这里是布尔值。
但找不到任何合适的例子。
这也是
catalog export field.java
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface CatalogExportField {
String color() default "#56aaff";
String columnName() default "";
String headerName() default "";
String displayName() default "";
}
搜索后,我做了一些并得到了错误:
Problem deserializing property 'MpAvailable' (expected type: [simple type, class java.lang.Boolean]; actual type: java.lang.String), problem: argument type mismatch at [Source: java.io.FileInputStream@1f40904; line: 1, column: 720] (through reference chain: java.util.ArrayList[0]->domain.util.CatalogExportDto["MpAvailable"])
的
这是在catalogexport dto
@JsonDeserialize(using = BooleanDeserializer.class)
@JsonProperty("MpAvailable")
@CatalogExportField(columnName = "K", headerName = "catalog.export.mp_available")
private Boolean mpAvailable;
这是解串器
public class BooleanDeserializer extends JsonDeserializer<String> {
protected static final String NO = "no";
protected static final String YES = "yes";
@Override
public String deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
JsonToken currentToken = jp.getCurrentToken();
if (currentToken.equals(JsonToken.VALUE_FALSE)) {
return NO;
}
return YES;
}
}
我现在改为现在
public class YesNoBooleanSerializer扩展了JsonSerializer {
protected static final String NO = "no";
protected static final String YES = "yes";
@Override
public void serialize(Boolean b, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeString(b ? NO : YES);
}
}
} }
字段
@JsonSerialize(using = YesNoBooleanSerializer.class)
@CatalogExportField(columnName = "K", headerName = "catalog.export.mp_available")
private Boolean mpAvailable;
我收到了错误
Can not deserialize value of type java.lang.Boolean from String "no": only "true" or "false" recognized at [Source: java.io.FileInputStream@1d1ec976; line: 1, column: 534] (through reference chain: java.util.ArrayList[0]->CatalogExportDto["mpAvailable"])
答案 0 :(得分:1)
一对无序的人:
JsonDeserializer<String>
时,可能你会说你的类会从JSON反序列化String
- s。实际上你想要反序列化为某种奇怪的自有类型,或者Boolean
,而不是String
,这是肯定的JsonToken.VALUE_FALSE
,这很可能是&#34;假&#34; 我对Spring或Boot一无所知,但写作
public class BooleanDeserializer extends JsonDeserializer<Boolean> {
protected static final String NO = "no";
protected static final String YES = "yes";
@Override
public Boolean deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
JsonToken currentToken = jp.getCurrentToken();
return currentToken.equals(YES);
}
}
可能是一个更好的开始。但是我真的不知道是否会调用它,因为JSON肯定有自己的布尔反序列化器。 根据{{3}},您可能更愿意将此反序列化内容用于您自己的类。