일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 비주얼 스튜디오 코드
- dockerfile
- github CI/CD
- 창업
- 스트림 예제
- AWS S3
- 라이프해킹스쿨
- AWS
- java stream
- CI/CD
- AWS 키페어
- AWS EC2
- AWS 프로젝트
- AWS ssh
- 자바 스트림
- 창업 마인드
- java null 처리
- 창업형인간되기
- vscode
- 마인드
- @async
- spring multi thread
- optional
- Visual Studio Code
- 창업형인간
- spring async
- java Optional
- ssh
- Optional 사용법
- AWS 프로젝트 올리기
- Today
- Total
Wookim
날짜 및 시간 정규식 예제(yyyy-MM-dd hh:mm:ss) 본문
yyyy-MM-dd hh:mm:ss 양식의 시간을 추출가능한 정규식 예제
예제)
\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01]) ([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])
날짜
년 : 4글자의 숫자
월 : 01, 02, ..., 09, 10, 11, 12
일 : 01, 02, ... 30, 31
시간
시 : 00, 01, 02, ... 21, 22, 23
분 : 00, 01, 02, ... 57, 58, 59
초 : 00, 01, 02, ... 57, 58, 59
위 사이트에서
2021-05-12 02:22:30
데이터를 넣고 위 정규식을 넣으면 추출되는 것을 확인 할 수 있다.
그리고 13월이나, 61분, 61초 등 양식에 맞지 않는 수를 입력하면 검출되지 않는다.
그러면 어떻게 사용하나?
spring @vaild 옵션
스프링을 개발하다보면 데이터를 검증해야 하는 일이 많다.
특히 controller에서 dto에 데이터를 자동으로 매핑받아 사용할 때! (@RequestBody)
@valid, @Pattern 애너테이션을 이용하면 간편하게 검증할 수 있다.
WookimDTO.class
@Setter
@Getter
@NoArgsConstructor
public WookimDTO{
@Pattern(regex = "\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01]) (0[1-9]|1[0-9]|2[0-3]):(0[1-9]|[1-5][0-9]):(0[1-9]|[1-5][0-9])", message = "날짜 포멧 안맞아요")
private String date;
}
위 정규식에 부합하여 데이터가 전부 조회되면 통과, 부합하지 않으면 예외가 발생한다.
WookimController.class
@RestController
public class WookimController{
@PostMapping(value ="/wookim/blog")
public ResponseEntity<Object> testMethod(@Valid @RequestBody WookimDTO wookimDTO
, BindingResult bindingResult) throws Exception{
if(bindingResult.hasErrors()){
return ResponseEntity.badRequest().body(bindingResult.getAllErrors());
}
....
}
}
@RequestBody DTO 앞에 @Valid 애너테이션을 붙여 해당 DTO 데이터가 전달될 때 DTO 내부의 검증 애너테이션들이 작동한다. 만약에 검증에 실패하면 파라미터로 추가한 BindingResult 객체에 예외 메시지가 저장된다.
예외 발생 여부는 bindingResult.hasError() 코드가 True 발생한것이다.
Json
{
"data" : "2021-13-21 12:12:12"
}
postman에서 데이터 전송하면!
"날짜 포멧이 안맞아요" 이런식으로 에러 메시지가 400 코드와 함께 나올 것이다.
2021-13-21 ... 와 같이 13월로 데이터를 보냈기 때문이다.
<시간 24:00:00 검출되는 문제 수정 완료 - 23.11.6>
!!! 제보자님께 감사드립니다!
'programming language > Java' 카테고리의 다른 글
spring Async(비동기, 멀티스레드) 메소드 적용하기(2) (0) | 2021.05.20 |
---|---|
spring Async(비동기, 멀티스레드) 메소드 적용하기(1) (0) | 2021.05.18 |
Spring DTO class의 특정 컬럼이 매핑 되지 않는 문제 (0) | 2021.05.03 |
Junit service(bean) private method test (0) | 2021.04.12 |
maven 태그 정리 (0) | 2020.05.26 |