I have a property like this:
@CatalogExportField(columnName = "K", headerName = "catalog name")
private Boolean mpAvailable;
I need to get this as string while parsing in other class
private CatalogExportDto convert(Variant variant, boolean willHaveProductTypeFields) {
CatalogExportDto dto = new CatalogExportDto()
.setMpAvailable(variant.isMpAvailable())
But here it is boolean.
but could not find any proper example.
this is also
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 "";
}
After searching, i did some and got error:
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"])
for
this is in catalogexport dto
@JsonDeserialize(using = BooleanDeserializer.class)
@JsonProperty("MpAvailable")
@CatalogExportField(columnName = "K", headerName = "catalog.export.mp_available")
private Boolean mpAvailable;
this is deserializer
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;
}
}
I changed to this now
public class YesNoBooleanSerializer extends 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);
}
}
} }
field
@JsonSerialize(using = YesNoBooleanSerializer.class)
@CatalogExportField(columnName = "K", headerName = "catalog.export.mp_available")
private Boolean mpAvailable;
i got error
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"])