第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

忽略 Jackson/spring/Java 中的 RootNode 和自定義映射

忽略 Jackson/spring/Java 中的 RootNode 和自定義映射

胡子哥哥 2023-04-26 14:34:31
如果我不需要它,我怎么能忽略它?我只需要賬單。如果我從 json 中刪除“版本”工作正常..我在控制臺日志上的錯誤2019-07-27 19:20:14.874  WARN 12516 --- [p-nio-80-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected token (FIELD_NAME), expected END_OBJECT: Current token not END_OBJECT (to match wrapper object with root name 'bill'), but FIELD_NAME; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Unexpected token (FIELD_NAME), expected END_OBJECT: Current token not END_OBJECT (to match wrapper object with root name 'bill'), but FIELD_NAME at [Source: (PushbackInputStream); line: 8, column: 2]]我的 json 看起來像這樣{    "bill":    {        "siteId":"gkfhuj-00",        "billId":"d6334954-d1c2-4b51-bb10-11953d9511ea"        },    "version":"1"}我的 json 類我嘗試使用 JsonIgnoreProperties 但它也沒有幫助我寫“版本”@JsonIgnoreProperties(ignoreUnknown = true)@JsonRootName(value = "bill")public class Bill {    private String siteId;    private String billId;//getters and setters我的 post 方法 lisen 對象 Bill    @PostMapping("/bill")    @ResponseBody    public ResponseEntity<String> getBill(@RequestBody Bill bill)
查看完整描述

1 回答

?
守候你守候我

TA貢獻(xiàn)1802條經(jīng)驗 獲得超10個贊

由于您依賴于Spring bootthrough 注釋和Jackson,因此自定義反序列化器將在這里完美運行。您必須創(chuàng)建反序列化器類,如下所示


public class BillDeserializer extends StdDeserializer<Bill> {


    public BillDeserializer() {

        this(null);

    }


    public BillDeserializer(Class<?> vc) {

        super(vc);

    }


    @Override

    public Bill deserialize(JsonParser jp, DeserializationContext ctxt) 

      throws IOException, JsonProcessingException {


        JsonNode billNode = jp.getCodec().readTree(jp);

        Bill bill = new Bill();

        bill.setSiteId(billNode.get("bill").get("siteId").textValue());

        bill.setBillId(billNode.get("bill").get("billId").textValue());      

        return bill;

    }

}

現(xiàn)在你必須指示你Jackson使用這個反序列化器而不是類的默認(rèn)反序列化器Bill。這是通過注冊 desearilizer 來完成的??梢酝ㄟ^Bill類上的簡單注釋來完成,例如@JsonDeserialize(using = BillDeserializer.class)


您的Bill課程通常如下所示


@JsonDeserialize(using = BillDeserializer.class)

public class Bill {


    private String siteId;

    private String billId;


//getters and setters

}


查看完整回答
反對 回復(fù) 2023-04-26
  • 1 回答
  • 0 關(guān)注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號