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