[英]How to customize json response generated by Spring HttpMessageConverters
我正在使用 spring @RestController 和 HttpMessageConverter 創建一個休息網絡服務。
對於我的控制器方法返回一些 POJO 並且 spring 使用“MappingJackson2HttpMessageConverter”將其轉換為 JSON 的簡單場景,它工作正常,如下所示:
{
"firstName": "John",
"lastName": "Smith",
}
但是 JSON 中的屬性名稱與我的 POJO 中的 getter 名稱相同。 我想動態修改 JSON 中的屬性名稱。
實際上要求是根據邏輯修改JSON屬性名稱。 例如,如果條件 X 則 JSON 中的屬性名稱應如下所示:
{
"fName": "John",
"lName": "Smith",
}
如果是 Y,那么 JSON 輸出中的屬性名稱應該是其他類似的內容:
{
"MainName": "John",
"SecondName": "Smith",
}
所以屬性名稱不能綁定到 pojo,我也不能使用 @jsonproperty,因為那是編譯時,但我想在運行時更改。
有沒有辦法覆蓋 MappingJackson2HttpMessageConverter 並將我的邏輯放在那里來決定 json 屬性名稱?
您可以使用 @JsonAnySetter @JsonAnyGetter 注釋。 后面可以使用 Map 實例。 如果你總是一鍵對象,你可以使用 Collections.singletonMap 在其他情況下使用 HashMap 或其他實現。 下面的示例顯示了使用這種方法是多么容易:
public class User {
private Map<String, String> values;
@JsonAnySetter
public void put(String key, String value) {
values = Collections.singletonMap(key, value);
}
@JsonAnyGetter
public Map<String, String> getValues() {
return values;
}
@Override
public String toString() {
return values.toString();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.