步驟
-
如果是 GET 請求中需要反序列化枚舉值(即 url 中的參數[querystring]),確保以下兩點
1.1. 重寫 StringToEnumConverterFactory
1.2. 配置 registry.addConverterFactory(new StringToEnumConverterFactory());
-
如果是 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 使用枚舉作為參數,重寫反序列化實現任意值轉枚舉類型