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

时间:2021-02-16 01:57:58

标签: spring-boot java-8 jackson jackson-databind

我有一个 Spring Boot Controller -

@RestController
public class UserController {

   @PostMapping
   @ResponseStatus(CREATED)
   public UserResponse register( @Valid @RequestBody UserRequest userRequest) {
     //return ....
   } 
}

下面是 UserRequest.java

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

    private String email;
    //other property
}

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

 {
   "email" : "TEST@Example.com",
   //some other fields.
 }

有时客户端以大写或驼峰形式发送 email,因此在 userRquest 我想将 email 字段的值更改为小写,如 test@example.com 同时反序列化为 {{ 1}} 对象。

有什么简单的方法可以做到这一点。我可以像 UserRequest 一样介绍我自己的 annotation 如何创建我自己的注释并在 @ToLowerCase 的字段级别使用它。

2 个答案:

答案 0 :(得分:0)

仅仅引入一个新的注解 @ToLowerCase 没有简单的方法, 因为那样你还需要实现一些注释处理器 用于进行真正的转换工作。

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

@JsonDeserialize(converter = ToLowerCaseConverter.class)
private String email;

需要自己实现转换器类, 但是从 StdConverter 扩展它很容易。

public class ToLowerCaseConverter extends StdConverter<String, String> {

    @Override
    public String convert(String value) {
        return value.toLowerCase();
    }
}

答案 1 :(得分:0)

Jackson 将在您的类中使用 setter 方法。 在 setter 中执行小写转换。

例如

public void setEmail(String newValue)
{
    email = StringUtils.lowerCase(newValue);
}

StringUtils 是一个 apache 公共类。