我有一个 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
的字段级别使用它。
答案 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 公共类。