簡體   English   中英

如何自定義 Spring HttpMessageConverters 生成的 json 響應

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM