spring boot 中接口參數為枚舉時的反序列化配置(總結)


步驟

  1. 如果是 GET 請求中需要反序列化枚舉值(即 url 中的參數[querystring]),確保以下兩點

    1.1. 重寫 StringToEnumConverterFactory

    1.2. 配置 registry.addConverterFactory(new StringToEnumConverterFactory());

  2. 如果是 POST 請求,確保以下兩點

    2.1. 在目標字段或 getXXX() 上寫 @JsonValue 注解,這個注解會在序列化以及反序列化時使用,但僅限於 json 格式的數據,如果是 GET 請求中 url 上的參數,這個就沒用,因為只有 json 的序列化和反序列化才會走 jackson 的代碼啊

    2.2. 如果字段或 getXXX() 返回的是 Integer 類型的數據,那么客戶端在傳值時需要 toString() 一下,即確保傳遞過來的值是字符串類型,而不是整型,否則無法解析參數(如果有時間再深究)。

    issues/2754,參考該 issue,目前只能通過枚舉中提供一個 static factory method 再加上 @JsonCreator 注解實現 int 值反序列化為枚舉類型,並且傳字符串的 int 也能正常反序列化(如果已經配置了這個 static factory method,就可以忽略 2.3 小節)

    2.3. 0"0" 也可以傳,這個會被反序列化成枚舉類型中的第一項

備注

關於第一點和第二點中具體代碼的配置,可以參考之前寫的spring-boot rest controller 使用枚舉作為參數,重寫反序列化實現任意值轉枚舉類型


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM