亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

序列化和反序列化具有相同名稱的 Jackson XML 元素

序列化和反序列化具有相同名稱的 Jackson XML 元素

holdtom 2023-07-28 15:18:09
我正在嘗試編寫代碼和對象來使用類反序列化 XML,如下所示Product:<list>  <product id="14032019"><![CDATA[Some text]]></product>  <product id="14032019" value="Some text"/></list>Product POJO 具有注釋如下的 value 屬性,它適用于這些情況:<product id="14032019" value="Some text"/>:@JacksonXmlProperty(isAttribute = true)private String value; <product id="14032019"><![CDATA[Some text]]></product>:@JacksonXmlCData@JacksonXmlTextprivate String value; 但當我組合所有注釋時,它似乎不起作用。有人遇到過這樣的問題嗎?編輯:我嘗試使用從父類繼承并單獨標識的 2 個不同子類進行注釋(我按照https://www.baeldung.com/jackson-annotations@JsonSubTypes中的示例進行操作)。此方法需要在 XML 中為每個標記調用一個屬性,而原始 XML 中未提供該屬性。className<product className="myPackage.Product1" id="123" value="Some text"/><product className="myPackage.Product2" id="123">Some text</product>對于沒有 className 屬性的情況,是否可以編寫自定義映射器或反序列化器?
查看完整描述

1 回答

?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

該解決方案背后的想法是實現一個特定的解串器。


public class ProductDeserializer extends StdDeserializer<Product> {


  public ProductDeserializer() {

      super(Product.class);

  }


  @Override

  public Product deserialize(JsonParser parser, DeserializationContext ctxt) throws IOException {

    Product p = new Product();


    while (parser.nextToken() != JsonToken.END_OBJECT) {

        String tokenName = parser.getCurrentName();


        switch (tokenName) {

            case "id":

                parser.nextToken();

                p.setId(parser.getText());

                break;


            // when you encounter an attribute called value or "" you take its value 

            case "value":

            case "":

                parser.nextToken();

                p.setValue(parser.getText().trim());

                break;


            default:

                break;

        }

    }

    return p;

  }

}

當你使用該類時,你必須注冊它XmlMapper:


XmlMapper xmlMapper = new XmlMapper();

SimpleModule module = new SimpleModule("configModule", Version.unknownVersion());

module.addDeserializer(Product.class, new ProductDeserializer());

xmlMapper.registerModule(module)

產品 POJO 具有 id 和 value 作為屬性。


查看完整回答
反對 回復 2023-07-28
  • 1 回答
  • 0 關注
  • 164 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號