我有一个DTO,其中Spring Boot试图反序列化请求体,但是,在这种情况下,我需要将JSON数组对象反序列化为字符串。
这是JSON请求:
{
"metadata": [{
"example": 1
}]
}
这是我的dto:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class someDto implements Serializable {
@JsonDeserialize(using = MetadataDeserializer.class)
@JsonProperty("metadata")
@JsonbProperty("metadata")
private String metadata;
}
我试着反序列化与反序列化器,但它没有工作:
public class MetadataDeserializer extends StdDeserializer<String> {
public MetadataDeserializer() {
super(String.class);
}
@Override
public String deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
return jsonParser.getValueAsString();
}
}
我需要捕捉一些类似的:
"metadata": "[{ "example": 1 }]"
此反序列化器在接收到带有@RequestBody的有效负载时启动。
我用这个反序列化器解决了这个问题:
public class MetadataDeserializer extends StdDeserializer<String> {
public MetadataDeserializer() {
super(String.class);
}
@Override
public String deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
return jsonParser.readValueAsTree().toString();
}
}