我有一个-
@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.
}
有时客户端会以大写或camel形式发送email
,因此在userRquest
中,我希望在反序列化为UserRequest
对象时将email
字段的值更改为小写,如test@example.com
。
有什么简单的方法可以做到这一点吗?我可以介绍一下我自己的annotation
吗?比如@ToLowerCase
,我如何创建自己的注解,并在UserRequest
中的字段级别使用它。
3条答案
按热度按时间i7uq4tfw1#
引入一个新的注解
@ToLowerCase
并不是一个简单的方法,因为这样还需要实现一些注解处理器来完成真实的的转换工作。但是你可以用一种稍微不同的方法来实现你的目标。在你的
UserRequest
类中用@JsonDeserialize
注解email
属性,并在那里指定一个converter
。您需要自己实现转换器类,但通过从
StdConverter
扩展它就很容易了。nkkqxpd92#
Jackson将在你的类中使用setter方法。在setter中执行到小写的转换。
比如说
StringUtils
是一个Apache公用类。thtygnil3#
您可以创建一个通用的
StringDeserializer
,并将其注册到ObjectMapper
中,如下所示:-字符串反序列化程序类
Jackson配置类
上面的代码使Jackson将所有字符串反序列化为小写并进行修剪。