我有一個用 SpringMvc 創建的現有服務。他已經被使用并接受這樣的物件:
public class MyDto{
private AType a;
private BType b;
//and corresponding getters and setters
}
和相應的Json
{
a: {},
b: {}
}
我想將 A 的基數更改為:
public class MyDto{
private List<AType> a;
private BType b;
//and corresponding getters and setters
}
和相應的 json :
{
a: [{}],
b: {}
}
但是我想繼續接受第一個表示中的 json,因為我無法輕松更新我的 api 的所有使用者。
我的第一個想法是創建我的 api 的第 2 版,因為這是重大更改。但我認為這太多了,因為如果 api 消費者發送一個元素,我可以只創建一個元素的串列。
但我不知道我是否可以用 spring mvc 做到這一點。
uj5u.com熱心網友回復:
是的,我認為如果您使用 @JsonDeserialize 進行少量自定義就可以了。
public class MyDto{
@JsonDeserialize(using = CustomDeserializer.class)
private List<AType> a;
private BType b;
//and corresponding getters and setters
}
這是 CustomDeserializer
public class CustomDeserializer extends JsonDeserializer<List<AType>> {
@Override
public List<AType> deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
if(jsonParser.isExpectedStartObjectToken()){
final AType aType = jsonParser.readValueAs(new TypeReference<AType>() {});
return Arrays.asList(aType);
}
return jsonParser.readValueAs(new TypeReference<List<AType>>() {});
}
}
我的想法很簡單:如果 json 以 Object Token 開頭,我們將其轉換為 AType 并添加到 List 然后回傳串列。如果不是,它必須以陣列開頭,我們將其轉換為串列
對不起,因為我使用的是記事本 ,所以有任何拼寫錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/392611.html
