Loading

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 使用枚举作为参数,重写反序列化实现任意值转枚举类型

posted @ 2021-07-12 22:58  myEsn2E9  阅读(1877)  评论(0编辑  收藏  举报