반응형
Spring Boot 컨트롤러의 열거형 무시 사례 역직렬화
쿼리 매개 변수로 열거된 Spring Boot 끝점이 있습니다.
@GetMapping("/example")
public List<Example> getByEnum(@RequestParam(name = "exampleEnum", required = false) ExampleEnum exampleEnum) {
// code
}
및 열거 클래스:
public enum ExampleEnum {
FIRST,
SECOND,
}
대문자 열거값을 끝점에 전달하면 역직렬화가 잘되지만 소문자에 대한 오류가 발생합니다.
java.lang.IllegalArgumentException: No enum constant
Spring Boot Rest 끝점에서 열거형 무시 사례를 역직렬화하는 방법은 무엇입니까?
이 질문은 쿼리 매개 변수 역직렬화와 관련이 있으므로 중복되지 않습니다.
편집: 아래 답변이 올바르지 않습니다.사용자 정의를 정의해야 합니다.PropertyEditor
Spring에 등록합니다.@InitBinder
제가 이 게시물에서 설명한 것입니다.@Dave 님께서 댓글로 이렇게 지적해주셔서 감사합니다.
Spring Boot 2.0은 ACCEPT_CASE_INSENT_ENUMS 기능이 있는 Jackson 2.9를 사용하고 있습니다.설정하여 활성화할 수 있어야 합니다.
spring.jackson.mapper.ACCEPT_CASE_INSENSITIVE_ENUMS = true
import com.fasterxml.jackson.annotation.JsonCreator;
import java.util.Arrays;
import java.util.Optional;
public enum ExampleEnum {
FIRST,
SECOND;
@JsonCreator
public static ExampleEnum setValue(String key) {
return Arrays.stream(ExampleEnum.values())
.filter(exampleEnum -> exampleEnum.toString().equals(key.toUpperCase()))
.findAny()
.orElse(null);
}
모든 열거형에 대해 일반 변환기를 만들 수 있습니다.
package ru.grancall.kb.logging.service.dto.converter;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.EnumUtils;
import java.beans.PropertyEditorSupport;
@AllArgsConstructor
public class EnumConverter extends PropertyEditorSupport {
private Class type;
public void setAsText(String text) {
setValue(EnumUtils.getEnum(type, text.toUpperCase()));
}
}
그런 다음 컨트롤러에서 다음을 사용합니다.
@InitBinder
public void initBinder(WebDataBinder dataBinder) {
dataBinder.registerCustomEditor(YourEnum.class, new EnumConverter(YourEnum.class));
}
대소문자를 구분하지 않고 모든 열거형을 처리하려면 Spring의 Application Conversion Service를 사용할 수 있습니다.
다음과 같은 작은 구성으로만 등록하면 됩니다(배들둥 참조).
@Configuration
public class EnumMappingConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
ApplicationConversionService.configure(registry);
}
}
언급URL : https://stackoverflow.com/questions/50231233/deserialize-enum-ignoring-case-in-spring-boot-controller
반응형
'source' 카테고리의 다른 글
ASP.NET MVC 보기 결과 대 부분 보기 결과 (0) | 2023.06.28 |
---|---|
Laravel 경로를 vue 구성 요소로 전달 (0) | 2023.06.28 |
Spring Boot Maven 플러그인을 사용하는 경우 Spring Boot 애플리케이션의 리소스가 jar 파일에서 누락됨 (0) | 2023.06.28 |
여러 개의 @조건부 주석을 지정할 수 있습니까? (0) | 2023.06.28 |
Django DB 설정 '잘못 구성됨' 오류 (0) | 2023.06.28 |