java - 如何在到达带有注释的句柄之前转换 Requestbody 的字段
问题描述
我需要在 post 方法中对一些有效载荷的主体进行一些更改,以更改大写或小写等值。我一直在研究最接近我需要的是 HandlerMethodArgumentResolver
@Documented
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LowerCase {
}
@Data
@Builder
@Document
@NoArgsConstructor
@AllArgsConstructor
public class Customer extends Model {
@LowerCase
private String email;
@LowerCase
private String username;
}
@RequestMapping(value = "user", method = RequestMethod.POST)
ResponseEntity<Customer> test(@RequestBody @Valid Customer payload) {
System.out.println(payload);
return ResponseEntity.ok(payload);
}
如果我发送这个
{
"email": "MYMAIL@GMAIL.COM",
"username": "JIBARRA"
}
需要这个的结果
{
"email": "mymail@gmail.com",
"username": "jibarra"
}
谢谢
解决方案
@Data
@Builder
@Document
@NoArgsConstructor
@AllArgsConstructor
public class Customer extends Model {
@JsonDeserialize(using = ToLowerCaseDeserializer.class)
private String email;
@JsonDeserialize(using = ToLowerCaseDeserializer.class)
private String username;
}
在 ToLowerCaseDeserializer.java 中实现将传入文本转换为小写的逻辑
public class ToLowerCaseDeserializer extends StdDeserializer<String> {
private static final long serialVersionUID = 7527542687158493910L;
public ToLowerCaseDeserializer() {
super(String.class);
}
@Override
public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
return _parseString(p, ctxt).toLowerCase();
}
}
推荐阅读
- python - 查找文本的正则表达式
- xml - 如何在 Marklogic 中使用元素值中的特殊字符加载 xml 文件?
- java - Selenium webdriver 正在查看 Chrome.exe 的错误路径
- r - 如何从包含数字和单词的 url 获取电影 ID?
- html - 我该如何处理这样的表格边框?
- java - 我收到“线程“主”java.lang.NoSuchMethodError 中的异常”错误
- android - 如何在对话框片段中从 LayoutInflater 切换到 AsyncLayoutInflater?
- python - 如何填充空格直到它到达定义的列
- swift - Swift 4 多维数组或结构?
- spring - 如何解决“配置问题:无法找到 XML 模式命名空间上下文的 Spring NamespaceHandler”?