Spring Boot 中 JSON 字段反序列化为小写

ppb*_*ppb 1 jackson java-8 spring-boot jackson-databind

我有一个Spring Boot Controller-

@RestController
public class UserController {

   @PostMapping
   @ResponseStatus(CREATED)
   public UserResponse register( @Valid @RequestBody UserRequest userRequest) {
     //return ....
   } 
}
Run Code Online (Sandbox Code Playgroud)

下面是UserRequest.java

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UserRequest {

    private String email;
    //other property
}
Run Code Online (Sandbox Code Playgroud)

我在请求正文中发送以下 json -

 {
   "email" : "TEST@Example.com",
   //some other fields.
 }
Run Code Online (Sandbox Code Playgroud)

有时客户端email以大写或驼峰形式发送,因此userRquest我想将email字段的值更改为小写,就像test@example.com反序列化为UserRequest对象时一样。

有没有什么简单的方法可以做到这一点。我可以介绍我自己的注释annotation吗,比如@ToLowerCase如何创建自己的注释并在UserRequest.

Tho*_*sch 5

仅仅引入一个新的注释并不容易@ToLowerCase,因为那样你还需要实现一些注释处理器来完成真正的转换工作。

但您可以通过稍微不同的方式实现您的目标。在您的UserRequest类中,用注释email属性@JsonDeserialize并指定 a converter

@JsonDeserialize(converter = ToLowerCaseConverter.class)
private String email;
Run Code Online (Sandbox Code Playgroud)

您需要自己实现转换器类,但通过从StdConverter.

public class ToLowerCaseConverter extends StdConverter<String, String> {

    @Override
    public String convert(String value) {
        return value.toLowerCase();
    }
}
Run Code Online (Sandbox Code Playgroud)