Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JAVA中将JSON对象转换为Pair对象_Java_Deserialization_Jackson Databind - Fatal编程技术网

如何在JAVA中将JSON对象转换为Pair对象

如何在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

从API客户端,我发送

{
    "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)
私人结对演讲者;
然后问题就解决了