为了账号安全,请及时绑定邮箱和手机立即绑定

如何在到达带有注释的句柄之前转换 Requestbody 的字段

如何在到达带有注释的句柄之前转换 Requestbody 的字段

万千封印 2022-11-02 16:55:55
我需要在 post 方法中对一些有效载荷的主体进行一些更改,以更改大写或小写等值。我一直在研究最接近我需要的是 HandlerMethodArgumentResolver@Documented@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public @interface LowerCase {}@Data@Builder@Document@NoArgsConstructor@AllArgsConstructorpublic 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"}谢谢
查看完整描述

3 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

@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();

    }


}


查看完整回答
反对 回复 2022-11-02
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

您可以使用 Spring消息转换器对请求正文进行更改,为Json 转换器(将JSON转换为对象)定义一个自定义转换器,并像下面一样为 spring-boot 添加它。

要编写消息转换器,请扩展 Spring AbstractHttpMessageConverter(用于新的自定义转换器),并覆盖三个方法 readInternal()、writeInternal() 和 supports() 。

Spring 使用 HttpMessageConverters 来呈现 @ResponseBody(或来自 @RestController 的响应)。您可以通过在 Spring Boot 上下文中添加适当类型的 bean 来贡献其他转换器。如果您添加的 bean 属于默认情况下会包含的类型(例如用于 JSON 转换的 MappingJackson2HttpMessageConverter),它将替换默认值。提供了一个 HttpMessageConverters 类型的便利 bean,如果您使用默认 MVC 配置,它始终可用。它有一些有用的方法来访问默认的和用户增强的消息转换器(例如,如果你想手动将它们注入到自定义的 RestTemplate 中,它会很有用)。

@Configuration

public class MyConfiguration {

@Bean

public HttpMessageConverters customConverters() {

    HttpMessageConverter<?> additional = ...

    HttpMessageConverter<?> another = ...

    return new HttpMessageConverters(additional, another);

}


}


查看完整回答
反对 回复 2022-11-02
?
HUH函数

TA贡献1836条经验 获得超4个赞

只需在控制器中执行即可。我不认为消息转换器是转换数据的地方

转换案例意味着某种业务约束或规则。因此,我认为您希望在控制器的代码中明确地发生这种情况,而不是注释的某些属性。然后,如果需求发生变化(因为它们总是如此),你知道在哪里以及如何改变它。


查看完整回答
反对 回复 2022-11-02
  • 3 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信