首頁 >Java >java教程 >如何自訂Spring的ObjectMapper以僅序列化@JsonProperty註解的屬性?

如何自訂Spring的ObjectMapper以僅序列化@JsonProperty註解的屬性?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-04 06:16:111084瀏覽

How to Customize Spring's ObjectMapper to Serialize Only @JsonProperty Annotated Properties?

在 Spring 中設定 ObjectMapper

在 Spring 應用程式中,ObjectMapper 是序列化和反序列化 JSON 資料的關鍵元件。您可以自訂 ObjectMapper 以滿足特定要求,例如僅序列化使用 @JsonProperty 註解的屬性。

要實現此目的,第一步是建立一個自訂 ObjectMapper 類,該類別擴展 Jackson 提供的基本 ObjectMapper 類別。覆寫預設的可見性檢查器以排除未註解的屬性:

public class MyCustomObjectMapper extends ObjectMapper {
    public MyCustomObjectMapper() {
        super();
        setVisibilityChecker(getSerializationConfig()
                .getDefaultVisibilityChecker()
                .withCreatorVisibility(JsonAutoDetect.Visibility.NONE)
                .withFieldVisibility(JsonAutoDetect.Visibility.NONE)
                .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withIsGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withSetterVisibility(JsonAutoDetect.Visibility.DEFAULT));
    }
}

接下來,在Spring 設定檔(servlet.xml)中註冊自訂ObjectMapper bean:

<bean>

最後,配置註解驅動的MVC 框架以使用自訂ObjectMapper:

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
                <property name="objectMapper" ref="customObjectMapper" />
            </bean>
        </list>
    </property>
</bean>

在提供的範例程式碼中,NumbersOfNewEvents 類別包含兩個公用屬性:

public class NumbersOfNewEvents implements StatusAttribute {
    public Integer newAccepts;
    public Integer openRequests;
    // ...
}

但是,只有newAccepts 屬性使用@JsonProperty 屬性:

@JsonProperty
public Integer newAccepts;

透過如上所述配置ObjectMapper,只有newAccepts 屬性當NumbersOfNewEvents 物件轉換為 JSON 時應進行序列化。這是因為自訂 ObjectMapper 在序列化過程中會排除未註解的屬性。

以上是如何自訂Spring的ObjectMapper以僅序列化@JsonProperty註解的屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn