SpringBoot 2 매개 변수 관리 실천 의 입력 이 검증 에 참여 하 는 방식
10457 단어 SpringBoot매개 변수검사 하 다
프로 그래 밍 시스템 에서 좋 은 코드 를 쓰기 위해 각종 디자인 모델,원칙,제약 등에 따라 코드 를 규범화 시 켜 코드 의 가 독성,재 활용 성,수정 이 가능 하 다.실제로 개인 적 으로 쓴 코드 가 좋 으 면 다른 사람 이 수정 해도 원작 자의 사고 와 포장 을 파괴 할 수 없다 고 생각 하 는데 이것 은 매우 높 은 수준 이 어야 한다.
그러나 일상적인 개발 에서 많은 객관 적 인 요소 에 지장 을 주 고 코드 를 계속 생각 하고 최적화 할 시간 이 별로 없 기 때문에 실제 상황 의 측면 에서 시스템 코드 를 어떻게 구축 하 는 지 생각 할 수 밖 에 없다.앞으로 자신 이 자신의 코드 를 읽 을 수 있 도록 확보한다.자신의 몇 년 프로 그래 밍 에서 실제 적 으로 다음 과 같은 몇 가지 측면 을 고려 할 것 이다.코드 등급 관리,명명 과 주석 이 통일 되 고합 리 적 인 디자인 업무 데이터 베 이 스 는 매개 변수 스타일 을 명 확 히 한다.
여기 서 매개 변수 관 리 를 살 펴 보 겠 습 니 다.
코드 규범 이라는 개념 을 어떻게 이해 합 니까?즉,대부분의 개발 인정,지 키 고 싶 은 제약,예 를 들 어 Spring 프레임 워 크 와 Mvc 모델 이 공사 에 대한 관리,에서 업무 개발 에 대한 규정 은 그 근본 적 인 목적 은 업무 발전 에 따라 코드 가 유지 할 수 없 는 경지 로 발전 하 는 것 을 피 하 는 것 입 니 다.
2.수신 매개 변수
수신 매개 변수 방식 은 여러 가지 가 있 습 니 다.List,Map,Object 등 이 있 지만 매개 변수의 의 미 를 명 확 히 하기 위해 매개 변수 대상 의 구 조 를 설계 하고 일정한 규범 을 지 켜 야 합 니 다.예 를 들 어 Map 수신 매개 변 수 를 명 확 히 금지 합 니 다.
Rest 스타일 수신 단일 ID 인자:
@GetMapping("/param/single/{id}")
public String paramSingle (@PathVariable Integer id){
return "Resp:"+id ;
}
지정 한 인자 여러 개 받 기:
@GetMapping("/param/multi")
public String paramMulti (@RequestParam("key") String key, @RequestParam("var") String var){
return "Resp:"+key+var ;
}
자바 기반 패키지 대상 입력:
@PostMapping("/param/wrap")
public ParamIn paramWrap (@RequestBody ParamIn paramIn){
return paramIn ;
}
--
public class ParamIn {
private Integer id ;
private String key ;
private String var ;
private String name ;
}
이상 은 개발 에서 자주 사용 하 는 몇 가지 연결 방식 으로 여 기 는 보통 다음 과 같은 몇 가지 습관 을 지 킵 니 다.업무 층 에 복잡 한 BO 대상 을 밀봉 하여 업무 관리의 복잡 도 를 낮 추 는 것 은 합 리 적 이 고 흔히 볼 수 있 는 조작 으로 웹 인터페이스 차원 에서 인터페이스 기능 에 따라 각자 참여 주 체 를 관리 하고 업무 가 실현 되 는 과정 에서 BO 대상 에 전송 할 수 있다.
복잡 한 업무 포장 대상 이 각 층 에서 흩 날 리 는 것 을 피하 고 여러 개의 인터페이스 가 같은 복잡 한 대상 이 라면 개발 자 들 을 헷 갈 리 게 하기 쉽다.
3.응답 매개 변수
매개 변수 수신 에 대응 하 는 것 은 바로 매개 변수 응답 이다.매개 변수 응답 은 보통 명확 한 제약 규범 을 가진다.응답 주체 데이터,응답 코드,설명 정 보 를 가진다.일반적으로 이런 세 가지 핵심 요소 다.
응답 매개 변수 주체:
이곳 의 일반적인 사용 은 일반적으로 주체 데이터 의 수신 에 쓰 인 다.
public class Resp<T> {
private int code ;
private String msg ;
private T data ;
public static <T> Resp<T> ok (T data) {
Resp<T> result = new Resp<>(HttpStatus.OK);
result.setData(data);
return result ;
}
public Resp (HttpStatus httpStatus) {
this.code = httpStatus.value();
this.msg = httpStatus.getReasonPhrase();
}
public Resp(int code, String msg, T data) {
this.code = code;
this.msg = msg;
this.data = data;
}
}
코드 상태 코드즉,인터페이스 상 태 는
HttpStatus
에서 상태 코드 에 대한 설명 을 참조 하고 지 키 는 것 을 권장 합 니 다.이것 은 보편적으로 지 키 는 규범 을 개발 하 는 것 입 니 다.업무 수 요 를 만족 시 키 지 않 으 면 적당 한 사용자 정의 부분 인 코딩 에서 응답 코드 를 완전히 사용자 정의 할 수 있 지만 필요 하지 않 습 니 다.Msg 설명
인터페이스의 응답 을 설명 하 는 Msg 는 성공 하거나 실패 할 수 있 습 니 다.더 많은 경우 에 업무 이상 을 처리 해 야 하 는 알림 정보 입 니 다.예 를 들 어 단일 번호 가 존재 하지 않 고 계 정 이 동결 되 는 등 업무 이상 에서 알림 정 보 를 캡 처 하고 페이지 에 응답 하거나 검증 이 통과 되 지 않 는 설명 을 입력 해 야 합 니 다.
데이터 데이터
인터페이스 응답의 주체 데 이 터 는 서로 다른 업무 응답의 대상 이 틀림없이 다 르 기 때문에 여 기 는 일반적인 메커니즘 을 바탕 으로 수신 하면 되 고 JSON 형식 으로 페이지 에 응답 하면 된다.
참고 사례
인터페이스 리 셋:
@PostMapping("/resp/wrap")
public Resp<KeyValue> respWrap (@RequestBody KeyValue keyValue){
return Resp.ok(keyValue) ;
}
응답 형식:
{
"code": 200,
"msg": "OK",
"data": {
"key": "hello",
"value": "world"
}
}
4.매개 변수 검사매개 변수 수신 과 응답 은 상대 적 으로 복잡 하지 않 습 니 다.처리 하기 어 려 운 것 은 바로 매개 변수 검사 입 니 다.제약 검사,업무 합 법성 검사,응답 매개 변수 비 공 비 null 검사 등 각종 장면 입 니 다.
시스템 운행 과정 에서 모든 매개 변 수 는 절대적 으로 신뢰 할 수 있 는 것 이 아니 기 때문에 매개 변수 검증 은 곳곳에서 볼 수 있다.서로 다른 장면 에서 의 매개 변수 검증 은 모두 필요 성 이 있 지만 근본 적 인 목적 은 요청 단 에 정 보 를 제시 하고 절 차 를 신속하게 중단 하 며 신속하게 응답 하 는 것 이다.
1.참고
많은 패 키 징 사상,디자인 모델,또는 여기 서 말 하 는 매개 변수 검증 은 기 존의 자바 소스 코드 나 우수한 구 조 를 참고 할 수 있 습 니 다.이것 은 반드시 갖 춰 야 할 기초 의식 입 니 다.
자바 네 이 티 브 방법의
java.lang.Thread
스 레 드:
public void interrupt() {
if (this != Thread.currentThread())
checkAccess();
synchronized (blockerLock) {
Interruptible b = blocker;
if (b != null) {
interrupt0();
b.interrupt(this);
return;
}
}
interrupt0();
}
자바 소스 코드 에 서 는 대부분 원생 if 판단 방식 으로 매개 변 수 를 검증 합 니 다.Spring 프레임 워 크
org.springframework.util.ClassUtils
도구 류 부분 코드:
public static Class<?> forName(String name, @Nullable ClassLoader classLoader)
throws ClassNotFoundException, LinkageError {
Assert.notNull(name, "Name must not be null");
Class<?> clazz = resolvePrimitiveClassName(name);
if (clazz == null) {
clazz = commonClassCache.get(name);
}
if (clazz != null) {
return clazz;
}
}
Spring 프레임 워 크 에 서 는 기본 적 인 if 판단 외 에 도 하나의org.springframework.util.Assert
단언 도구 류 를 패키지 합 니 다.2.자주 사용 하 는 검사 방식
판단 하 는 경우
@GetMapping("/check/base")
public String baseCheck (@RequestParam("var") String var){
if (var == null) {
return var+" is null" ;
}
if ("".equals(var)){
return var+" is empty" ;
}
if ("hello".equals(var)){
return var+" sensitive word " ;
}
return var + " through " ;
}
이러한 판단 은 코드 에서 흔히 볼 수 있 습 니 다.다만 검증 의 주체 대상 이 매우 크 고 분포 식 환경 에서 if 판단 을 반복 적 으로 써 야 한다 면 실 수 를 하기 쉬 운 것 은 한 가지 이 고 개발 자 에 대한 인내심 시험 은 다른 한 가지 입 니 다.유효한 구성 요소
몇 년 전에 비교적 유 행 했 던 자주 사용 하 는 검사 구성 요소
Hibernate-Validator
가 나중에 유행 한Validation-Api
는 전 자 를 참고 하여 실현 한 것 이 라 고 한다.그러나 이것 은 중요 하지 않다.두 사람 은 모두 자바 빈 에 대한 검사 체 제 를 간소화 했다.주 해 를 기반 으로 자바 대상 의 필드 속성 을 표시 하고 검증 에 실패 할 경우 알림 정 보 를 설정 합 니 다.
public class JavaValid {
@NotNull(message="ID ")
private Integer id ;
@Email(message=" ")
private String email ;
@NotEmpty(message = " ")
@Size(min = 2,max = 10,message = " ")
private String data ;
}
검사 결과 인쇄:
public class JavaValidTest {
private static Validator validator ;
@BeforeClass
public static void beforeBuild (){
validator = Validation.buildDefaultValidatorFactory().getValidator();
}
@Test
public void checkValid (){
JavaValid valid = new JavaValid(null,"email","data") ;
Set<ConstraintViolation<JavaValid>> validateInfo = validator.validate(valid) ;
//
validateInfo.stream().forEach(validObj -> {
System.out.println("validateInfo:"+validObj.getMessage());
});
}
}
인터페이스 사용:
@PostMapping("/java/valid")
public JavaValid javaValid (@RequestBody @Valid JavaValid javaValid,BindingResult errorMsg){
if (errorMsg.hasErrors()){
List<ObjectError> objectErrors = errorMsg.getAllErrors() ;
objectErrors.stream().forEach(objectError -> {
logger.info("CheckRes:{}",objectError.getDefaultMessage());
});
}
return javaValid ;
}
이러한 검사 체 제 는 주해 방식 을 바탕 으로 일반적인 입 참 검 사 를 대폭 간소화 할 수 있 으 나 업무 매개 변수 에 대한 합 법 적 인 검사 에 적응 하지 못 한다.예 를 들 어 흔히 볼 수 있 는 ID 가 존재 하지 않 고 상태 차단 등 이다.Assert 단언
Assert 단언 방식 에 대해 처음에는 유닛 테스트 에서 흔히 볼 수 있 었 는데 나중에 각종 우수한 프레임 워 크 에서 흔히 볼 수 있 었 다.예 를 들 어 Spring,Mybatis 등 이다.그 다음 에 업무 코드 에 나타 나 기 시작 했다.
public class AssertTest {
private String varObject ;
@Before
public void before (){
varObject = RandomUtil.randomString(6) ;
}
@Test
public void testEquals (){
Assert.assertEquals(varObject+" ",varObject,RandomUtil.randomString(6));
}
@Test
public void testEmpty (){
Assert.assertTrue(StrUtil.isNotEmpty(varObject));
Assert.assertFalse(varObject+" not empty",StrUtil.isNotEmpty(varObject));
}
@Test
public void testArray (){
/*
: arrays first differed at element [1];
Expected :u08
Actual :mwm
*/
String var = RandomUtil.randomString(5) ;
String[] arrOne = new String[]{var,RandomUtil.randomString(3)} ;
String[] arrTwo = new String[]{var,RandomUtil.randomString(3)} ;
Assert.assertArrayEquals(" ",arrOne,arrTwo);
}
}
Assert 는 전통 적 인 if 판단 을 바 꾸 고 매개 변수 검사 의 코드 줄 수 를 대량으로 줄 이 며 프로그램의 가 독성 을 높 일 수 있다 고 단언 한다.이런 스타일 은 현재 비교적 유행 하 는 방식 이다.5.소스 코드 주소
GitHub・ https://github.com/cicadasmile/middle-ware-parentGitEE・
https://gitee.com/cicadasmile/middle-ware-parent
이상 은 SpringBoot 2 매개 변수 관리 실천 입 니 다.검사 에 참여 하 는 상세 한 내용 을 참고 하 십시오.SpringBoot 2 매개 변수 검사 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Java・SpringBoot・Thymeleaf】 에러 메세지를 구현(SpringBoot 어플리케이션 실천편 3)로그인하여 사용자 목록을 표시하는 응용 프로그램을 만들고, Spring에서의 개발에 대해 공부하겠습니다 🌟 마지막 데이터 바인딩에 계속 바인딩 실패 시 오류 메시지를 구현합니다. 마지막 기사🌟 src/main/res...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.