java 使用Jackson反序列化requestParam枚举,在 Spring Boot 中不区分大小写

plicqrtu  于 2023-01-11  发布在  Java
关注(0)|答案(1)|浏览(155)

我的空气污染指数低于

@GetMapping(value = "/employees")
    public List<Employee> getEmployees(
        @RequestParam(value = "mode", required = false) final EmployeeMode mode) {
        //calling service from here
    }

我使用EmployeeMode枚举作为requestParam。

public enum EmployeeMode {

    REGULAR,
    ALL,
    TEMPROARY
}

我想接受不区分大小写的请求。尝试使用@JsonAlias@JsonCreatorobjectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS, true);spring.jackson.mapper.accept-case-insensitive-enums: true。没有任何效果。
我用的是 Spring Boot 2.5.5。
如何使用requestParam接受不区分大小写的请求?如果requestParam为空,希望将默认枚举设置为ALL。

rdlzhqv9

rdlzhqv91#

您可以通过实现converter来处理它。

public class EmployeeModeConverter implements Converter<String, EmployeeMode> {
    @Override
    public EmployeeMode convert(String source) {
        switch (source.toUpperCase()) {
            case "REGULAR": return EmployeeMode.Regular;
            case "TEMPROARY": return EmployeeMode.TEMPROARY;
            default: return EmployeeMode.ALL;
        }        
    }
}

@Configuration
public class Config extends WebMvcConfigurationSupport {
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new EmployeeModeConverter());
    }
}

相关问题