0
我有一個屬性是這樣的:布爾序列化到字符串錯誤
@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: [email protected]; 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;
}
}
我改變了這個現在
公共類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: [email protected]; line: 1, column: 534] (through reference chain: java.util.ArrayList[0]->CatalogExportDto["mpAvailable"])
[email protected]作爲它給出的輸出。不是,或者是:(@tevemadar – mark
@mark可能我不明白這個目標,到目前爲止我所看到的是你在某個地方有一個布爾字段,並且出於某種原因,你將它序列化爲「是」或「否」 JSON,但不能讀取它(反序列化)。但是現在你的註釋可能意味着JSON本身包含了字符串化的線程引用,在這種情況下,序列化部分必須被重新訪問,並且反序列化會在前面。 – tevemadar
我想要使用是或否,不是真或假。值是布爾值,但我想用它作爲是或否 – mark