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 매 거 진 유형 전달 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기