如何在JAVA中将JSON对象转换为Pair对象
从API客户端,我发送如何在JAVA中将JSON对象转换为Pair对象,java,deserialization,jackson-databind,Java,Deserialization,Jackson Databind,从API客户端,我发送 { "scheduledDateTime": "27-12-2020 08:55:46", "subscriptionClosedBy": "30-12-2020 08:55:46", "presenter":{"first":"Jone Doe","second":"Senior
{
"scheduledDateTime": "27-12-2020 08:55:46",
"subscriptionClosedBy": "30-12-2020 08:55:46",
"presenter":{"first":"Jone Doe","second":"Senior Tech Lead"}
}
我的以下API端点的JSON对象
public ResponseEntity<ApiResponse> saveWorkshop(@RequestBody Workshop workshop)
public responseenty saveWorkshop(@RequestBody Workshop)
Workshop类包含一个Pair type属性,如下所示
public class Workshop extends PersistObject {
private LocalDateTime scheduledDateTime;
private LocalDateTime subscriptionClosedBy;
private Pair<String, String> presenter;
}
公共类对象{
私有LocalDateTime scheduledDateTime;
私有LocalDateTime subscriptionClosedBy;
私人结对演讲者;
}
当请求到达端点时,抛出异常,如下所示
public class Workshop extends PersistObject {
private LocalDateTime scheduledDateTime;
private LocalDateTime subscriptionClosedBy;
private Pair<String, String> presenter;
}
原因:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法
构造org.springframework.data.util.Pair的实例
如何克服这个问题?我创建了以下自定义反序列化器类
public final class PairDeserializer extends JsonDeserializer<Pair<String, String>> {
static private ObjectMapper objectMapper = null;
@Override
public Pair<String, String> deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
if (objectMapper == null) {
objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}
JsonNode treeNode = jsonParser.getCodec().readTree(jsonParser);
String first = objectMapper.treeToValue(treeNode.get("first"), String.class);
String second = objectMapper.treeToValue(treeNode.get("second"), String.class);
return Pair.of(first, second);
}
}
public final类pairderSerializer扩展了JsonDeserializer{
静态私有ObjectMapper ObjectMapper=null;
@凌驾
公共对反序列化(JsonParser、JsonParser、DeserializationContext、DeserializationContext)抛出IOException、JsonProcessingException{
if(objectMapper==null){
objectMapper=新的objectMapper();
objectMapper.configure(在未知属性上反序列化feature.FAIL,false);
}
JsonNode treeNode=jsonParser.getCodec().readTree(jsonParser);
String first=objectMapper.treeToValue(treeNode.get(“first”),String.class);
String second=objectMapper.treeToValue(treeNode.get(“second”)、String.class);
返回对(第一,第二);
}
}
并将其应用于车间课程,如下所示
@JsonDeserialize(using = PairDeserializer.class)
private Pair<String, String> presenter;
@JsonDeserialize(使用=pairderSerializer.class)
私人结对演讲者;
然后问题就解决了