簡體   English   中英

是否有 Jackson 注釋在反序列化期間以及字符串序列化期間使用包裝器 class

[英]Is there a Jackson annotation to use a wrapper class during deserialization as well as during serialization for Strings

嗨 StackOverflow 社區,

我目前正在嘗試反序列化通過 Spring Boot @RestController提供的 JSON 請求正文。

請求正文包含以下數組:

{
  ...
  "productIds": [
    "123abc",
    "234def"
  ],
  ...
}

但是,我不想將產品 ID 反序列化為字符串列表,而是使用簡單的包裝器 class (出於各種原因,包括但不限於額外的類型安全和驗證機會)。 因此 class 看起來像這樣( Lombok 注釋用於保持代碼片段簡短):

@Value
@AllArgsConstructor
public class TheRequest {
   ...
   List<ProductId> productIds;
   ...
}

如前所述,ProductId 只是一個簡單的包裝器(為簡潔起見,省略了驗證注釋):

@Value
@AllArgsConstructor
public class ProductId{
   String id;
}

查看 Stackoverflow,我只找到了使用相當冗長的自定義反序列化方法來實現此目的的方法。 但是,我有點驚訝,Jackson 沒有提供開箱即用的功能。 因此,如果有人知道如果

  • 有一種更優雅的方法可以將字符串數組反序列化為 WrapperObjects 列表,理想情況下僅使用 Jackson 注釋?
  • 有一種優雅的方法可以將這樣的ProductId包裝器對象列表序列化回字符串對象,理想情況下也只使用 Jackson 注釋? 我嘗試了 Jacksons @Value ,但沒有提供所需的結果。

對我來說仍然很冗長,但它似乎是 Jacson 2.14+ 的有效解決方案:

public record PayloadId(String id) {

  @JsonCreator(mode = Mode.DELEGATING)
  public PayloadId{}

  @JsonValue
  @Override
  public String id() {
    return id;
  }
}

...這是記錄測試https://github.com/FasterXML/jackson-databind/blob/2.14/src/test-jdk14/java/com/fasterxml/jackson/databind/records/RecordCreatorsTest.Z93F725A07423FE1C889F441Z2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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