정 규식이
정규식 사용시
"^([a-zA-Z]+)(\\s?[a-zA-Z])*$"
자바가 아니면,
"^([a-zA-Z]+)(\s?[a-zA-Z])*$"
\슬래시 하나 차이이다..
자바는 문자열 안에 특수문자 넣으려면
\가 하나 더 필요하다.
슬래시 중간에 \s 할 때, 슬래시 두개냐, 한개냐가 헷갈린다...
자바는 문자열로 특수문자앞에 \를 넣어줘야 되다보니 \\s라고 쓰지만,,
정규식 테스트 사이트 에서는 \를 하나만 사용해야된다.
"^50000|[1-4]{1}[0-9]{4}|[0-9]{3,4}$"
이렇게 하면된다.
풀어보자면,
50000 || 10000 ~ 49999 || 100 ~ 9999 < 이 같은 값들이 나온다고 보면된다.
값을 줘도 되고, 안 줘도 되는데, 주게 될 때 유효성을 검증해야 된다면?
private Optional<@NotBlank String> korName = Optional.empty();
private Optional<@NotBlank @Pattern(regexp = "^([a-zA-Z]+)(\\s?[a-zA-Z])*$") String> engName = Optional.empty();
private Optional<@Range(min= 100, max= 50000) Integer> price = Optional.empty();
그리고 여기에 Generate로 Getter만 생성해주면 된다.
사실 나는 Optional 안에 감싸는 것을 보고,
그 안에 이것 저것 다 집어넣었다.
@NotBlank, @NotSpace(커스텀이다.), @Pattern(정규식) @Nullable 등등..
문제를 풀어가면서 들었던 설명은..
역시 코드는 위에서 아래로 흘러가는 것, 정규식을 아~무리 정규롭게 써놨더라도, 앞에 @Not머시기들이 나오면, 그냥 그대로 팅겨나와 에러가 나온다.
생각해보면, Blank나 Space가 정규식에서 이미 다 필터링 되게 되어있어서, 굳이 사용할 필요없다.
그리고 Nullable은 이미 Optional 클래스가 들어간 이상, Null을 허용한다는 의미이다.
그래서 역시 Nullable이 의미가 없다. 코드가 복잡해질 뿐..
그래서 그냥 Optional 안에 정규식을 감싸는 것만으로도 해결된다.
그런데, 사실 그냥 정규식만 써도 된다...
왜냐하면 정규식은 null이 들어오면 동작하지 않는다고 한다.
그냥 각 필드마다 @Pattern으로 정규식만 필드 앞에 선언해놓으면 되는 것이다.
정리하자면,
값을 줘도 되고, 안 줘도 되는데, 주게 될 때 유효성을 검증해야 된다면?
그리고, Dto에는 private을 사용해서 필드를 선언하는데, 어떻게 클라이언트의 요청으로부터 주는 데이터의 값들이 들어가서 Dto클래스를 생성할까..? Getter, Setter가 하는 일이 아니었다.
여튼 본론으로 들어가서 어떻게 요청으로부터 받은 데이터의 값들이 private 변수에 들어가서 Dto 클래스를 만들어낼까...?
바로...Reflection API 때문이다..
Reflection API는 클래스의 정보를 바탕으로 객체를 생성하는 아주 강려크한 API이다.
여기에 대충 젤 밑에 쪽에 나온다..
여튼
@Nullable 과 같은 기능을 한다.
커밋 o