annotation
[Spring] Controller에서 사용하는 애너테이션
2019.09.25 : Languages & Frameworks/Spring@RequestParam queryString이나 form 요청에서 파라미터를 하나 하나 받을 때 사용한다. ```java @RequestParam("name") @RequestParam(value="name", defaultValue="unknown") // ?name이 없어도 4** 뜨지 않음 @RequestParam(value="name", required=false) ``` 파라미터 하나 하나 마다 애너테이션을 적어줘야 하니 여러개를 받을 때는 지저분해져서 부적합하다. 여러개를 한번에 받기 위해 아래 처럼 Map으로 받는 방식은 쓰지 않는 것이 좋다. 대신 커맨드 객체(+@ModelAttribute)를 사용하자. ```java // 아래 방식은 별로다. 커맨드 객체를 쓰자 @RequestParam..
[Spring] annotation : bean constraints, validation
2019.07.11 : Languages & Frameworks/Springbeanvalidation.org/2.0/spec/#builtinconstraints @Size, @Past, @Min(1) 등 애너테이션이 어떤 제약조건을 가지고 있는지 확인하려면 그냥 애너테이션 소스 확인해보면 된다. 참고로 `` @Email`` 애너테이션은 길이 제한도 겸하고 있다. `` {64}@{255}`` DB에 저장할 때도 VARCHAR2(320)으로 하면 깔끔하다. controller에서 data class 받으면서 한 번에 조건 체크 ```java @AssertTrue(message = "허용된 리스트 목록에 없는 코드") private boolean isInAllowList() { return !Arrays.asList(A, B, C).contains(code); } ``` Null, ..
[Spring] annotation : lombok
2019.07.10 : Languages & Frameworks/Spring@Data https://projectlombok.org/features/Data ``kt @Data = RequiredArgsConstructor + ToString + EqualsAndHashCode + Getter + Setter`` 여기서 `` RequiredArgsConstructor``는 다른 Constructor 애너테이션이나 명시적으로 선언된 Constructor가 없을 때만 붙는다. callSuper를 설정해야 하는 경우 해당 애너테이션과 Data를 함께 써도 된다. (설정된 애너테이션을 defer 처리 해주기 때문에 순서 상관 없다.) `` RequiredArgsConstructor``는 final 이거나 @NonNull인 필드에 대해서 생성자를 만들어 준다. Spring에서 생성자DI..
[Java] Jackson ObjectMapper Serialization
2019.05.15 : Languages & Frameworks/Springhttps://github.com/FasterXML/jackson-annotations/wiki/Jackson-Annotations https://www.tutorialspoint.com/jackson_annotations/jackson_annotations_jsonanysetter.htm ObjectMapper 는 생성 비용이 꽤 비싸기 때문에 멤버변수 / bean / static으로 처리 !!! ObjectMapper는 Thread Safe하기 때문에 굳이 매번 생성해서 따로 쓸 필요가 없음. 그리고 생성 비용이 비싼 편이라 매번 생성하도록 하는 경우 138배까지 성능 차이가 발생할 수 있음. (마스크 대란) 그래서 reuse를 권장하고 있음. case Bean: 전역적으로 ObjectMapper를 ..