Springboot项目中 自定义参数转换

在Spring Boot中,请求入参的类型转换通常是通过类型转换器(Converter)和格式化器(Formatter)来实现的。这两种机制都是用于将一个类型转换为另一个类型,但它们的实现方式略有不同。

类型转换器

用于将一个类型转换为另一个类型的通用机制。它可以将任何类型转换为任何其他类型,只需要提供相应的转换规则即可。在Spring Boot中,类型转换器通常实现Converter接口,并将其注册到Spring应用程序上下文中。当需要将某个类型转换为另一个类型时,Spring会自动选择合适的类型转换器进行转换。

格式化器

用于将一个类型转换为另一个类型的特殊机制。和类型转换器不同,格式化器通常只用于将字符串类型转换为其他类型,例如将字符串“2022-01-01”转换为日期类型。在Spring Boot中,格式化器通常实现Formatter接口,并将其注册到Spring应用程序上下文中。当需要将字符串类型转换为其他类型时,Spring会自动选择合适的格式化器进行转换。

自定义类型转换器

通常实现Converter接口,并实现其中的convert方法。该方法接受源类型的值并返回目标类型的值。

import org.springframework.core.convert.converter.Converter;

public class StringToEnumConverter<T extends Enum<T>> implements Converter<String, T> {
   
    private final Class<T> targetType;

    public StringToEnumConverter(Class<T> targetType) {
   
        this.targetType = targetType;
    }

    @Override
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在 Spring Boot ,我们可以通过实现 Converter 接口来自定义类型转换器,但是有时候我们发现自定义转换器并没有生效。这可能是因为 Spring Boot 默认使用的是 GenericConversionService,而不是我们自定义的 ConversionService。 解决这个问题的方法有两种: 1. 在自定义转换器上添加 @Component 注解,将其注册到 Spring 容器,并在需要使用该转换器的地方使用 @Autowired 注入。这样就可以确保我们自定义转换器会被使用。 2. 自定义一个 ConversionService,将其注册到 Spring 容器,并在需要使用该转换器的地方使用 @Qualifier 注解指定使用我们自定义转换器。这种方法需要手动配置 ConversionService,但是可以更灵活地控制转换器的使用。 下面是第二种方法的示例代码: ```java @Configuration public class ConversionConfig { @Bean public ConversionService conversionService() { DefaultConversionService conversionService = new DefaultConversionService(); // 注册自定义转换器 conversionService.addConverter(new MyConverter()); return conversionService; } } ``` 在需要使用自定义转换器的地方,可以使用 @Qualifier 注解指定使用我们自定义的 ConversionService,例如: ```java @RestController public class DemoController { @Autowired @Qualifier("conversionService") private ConversionService conversionService; @GetMapping("/test") public String test(@RequestParam("myParam") MyParam myParam) { // 使用自定义转换器将字符串转换为自定义类型 MyParam // ... return "success"; } } ``` 希望能帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值