springboot 매 거 진 형식 전달 절차
5740 단어 springboot매 거
테스트
우선 매 거 진 클래스 를 만 듭 니 다.
public enum ScoreType {
TOTAL_SCORE(" "),
MIDDLE_SCORE(" "),
FINAL_SCORE(" ");
String des; //
ScoreType(String des) {
this.des = des;
}
public String getDes() {
return des;
}
}
매 거 진 api 인 터 페 이 스 를 만 듭 니 다:
@RestController
@RequestMapping("/Klass")
public class KlassController {
@GetMapping("testEnum")
public String testEnum(@RequestParam ScoreType scoreType) {
return " :" + scoreType.ordinal() + ", :" + scoreType.name();
}
}
테스트 를 진행 하고 매 거 진 이름 으로 데 이 터 를 보 냅 니 다:매 거 진 번호 로 데 이 터 를 보 냅 니 다:
이 를 통 해 알 수 있 듯 이 springboot 기본 요청 매개 변수 맵 에서 매 거 진 유형 은 매 거 진 이름 으로 만 매개 변수 맵 을 할 수 있 지만 가끔 은 번호 로 매 핑 을 해 야 합 니 다.
Converter
고려 할 때 컨버터 는 전환 이라는 뜻 입 니 다.우 리 는 정 의 된 컨버터 를 통 해 매개 변수 에서 매 거 진 유형 간 의 전환 을 확인 할 수 있 습 니 다.
public class BaseEnumConverter<T extends Enum> implements Converter<String, T> {
private Map<String, T> enumMap = new HashMap<>();
public BaseEnumConverter(Class<T> enumType) {
T[] enums = enumType.getEnumConstants();
for (T e : enums) {
enumMap.put(String.valueOf(e.ordinal()), e);
enumMap.put(e.name(), e);
}
}
@Override
public T convert(String source) {
T t1 = enumMap.get(source.toLowerCase());
T t2 = enumMap.get(source.toUpperCase());
if (t1 == null && t2 == null) {
throw new IllegalArgumentException(" ");
}
return t1 == null ? t2 : t1;
}
}
코드 를 분석 하고 실행 할 때 구체 적 으로 매 거 진 매개 변수 에 따라 모든 매 거 진 값 을 얻 으 며 각 매 거 진 값 시퀀스 와 매 거 진 값 이름과 매 거 진 값 사 이 를 매 핑(Map 에 저장)합 니 다.상기 매 거 진 유형 과 같이 다음 과 같은 맵 을 생 성 합 니 다.
0 => ScoreType.TOTAL_SCORE
TOTAL_SCORE => ScoreType.TOTAL_SCORE
1 => ScoreType.MIDDLE_SCORE
MIDDLE_SCORE => ScoreType.MIDDLE_SCORE
2 => ScoreType.FINAL_SCORE
FINAL_SCORE => ScoreType.FINAL_SCORE
이 컨버터 를 통 해 프론트 데스크 톱 번호 와 매 거 진 이름 을 실현 할 수 있 습 니 다.매 거 진 유형 에 성공 적 으로 매 핑 할 수 있 습 니 다.이 컨버터 를 공장 모드 를 통 해 springboot 에 제공 합 니 다.
public class BaseEnumConverterFactory implements ConverterFactory<String, Enum> {
private static final Map<Class, Converter> CONVERTERS = new HashMap<>();
@Override
public <T extends Enum> Converter<String, T> getConverter(Class<T> targetType) {
//
Converter<String, T> converter = CONVERTERS.get(targetType);
if (converter == null) {
converter = new BaseEnumConverter<>(targetType);
CONVERTERS.put(targetType, converter);
}
return converter;
}
}
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverterFactory(new BaseEnumConverterFactory());
}
}
테스트 를 진행 하고 매 거 진 이름 으로 데 이 터 를 보 냅 니 다:유연 화
유연성 을 확보 하기 위해 매 거 진 유형 마다 전환 방식 을 사용자 정의 할 수 있 고 인 터 페 이 스 를 구축 하여 인터페이스 에 유형 전환 을 하고 BaseEnum 인 터 페 이 스 를 구축 할 수 있 습 니 다.
public interface BaseEnum {
String[] getKeys(); // keys BaseEnum
}
매개 클래스 는 이 인 터 페 이 스 를 실현 하고 맵 방식 을 정의 합 니 다.
public enum ScoreType implements BaseEnum {
TOTAL_SCORE(" "),
MIDDLE_SCORE(" "),
FINAL_SCORE(" ");
String des; //
ScoreType(String des) {
this.des = des;
}
public String getDes() {
return des;
}
@Override
public String[] getKeys() {
String[] s = {String.valueOf(this.ordinal()), this.name()}; // , 0 total_score => ScoreType.TOTAL_SCORE
return s;
}
}
변환기 가 BaseEnum 을 통일 적 으로 변환 합 니 다:
public class BaseEnumConverter<T extends BaseEnum> implements Converter<String, T> {
private Map<String, T> enumMap = new HashMap<>();
public BaseEnumConverter(Class<T> enumType) {
T[] enums = enumType.getEnumConstants();
// keys
for (T e : enums) {
for (String key : e.getKeys()) {
enumMap.put(key, e);
}
}
}
@Override
public T convert(String source) {
T t1 = enumMap.get(source.toLowerCase());
T t2 = enumMap.get(source.toUpperCase());
if (t1 == null && t2 == null) {
throw new IllegalArgumentException(" ");
}
return t1 == null ? t2 : t1;
}
}
모든 매 거 진 형식 에 대해 서 는 돌아 오 는 keys 를 통 해 변환 방식 을 정의 할 수 있 습 니 다.이상 은 springboot 매 거 진 유형 전달 절차 의 상세 한 내용 입 니 다.springboot 매 거 진 유형 전달 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin Springboot -- 파트 14 사용 사례 REST로 전환하여 POST로 JSON으로 전환前回 前回 前回 記事 の は は で で で で で で を 使っ 使っ 使っ て て て て て リクエスト を を 受け取り 、 reqeustbody で 、 その リクエスト の ボディ ボディ を を 受け取り 、 関数 内部 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.