Programming-[Backend] (394) 썸네일형 리스트형 [스프링 웹MVC-2] 19. 타입 컨버터 - Formatter 1. 포맷터(Fomatter)란? 지난 글에서 학습한 Converter의 세부적인 개념이다. 특히나 금액, 날짜와 같은 자주 쓰는 타입에 대해 지역 정보(Locale)를 바탕으로 객체 문자 간 특화된 변환을 지원한다. 스프링에서 제공하는 Formatter를 살펴보면 Printer, Parser 객체를 상속받는 것을 볼 수 있다. 각각의 메서드 중 print 메서드는 객체를 문자로 변경하고, parse 메서드는 문자를 객체로 변경하는 역할을 한다. 2. Formatter 사용 직접 사용해보기 Formatter를 사용하는 기본적인 방법에 대해 알아본다. 테스트 코드로 위에서 다룬 print, parse 메서드를 연습한다. org.springframework의 Formatter를 상속받고, 타입은 Number.. [스프링 웹MVC-2] 18. 타입 컨버터 - ConversionService HTTP 요청을 통해 서버로 넘어온 정보 중, 서버에서 원하는 타입이 아닌 정보가 있을 수 있다. 각 필드들을 원하는 타입으로 변환하는 자바 코드를 사용해도 되지만, 스프링에서 제공하는 타입 컨버터 기능을 사용하면 자동으로 타입 변환이 되도록 할 수 있을 뿐만 아니라 사용자 지정 타입의 필드값으로 변경할 수 있는 등 여러 가지 장점이 있다. 1. 프로젝트 생성 아래 사진과 같이 생성하고, 늘 했던 방식과 같이 Build는 intelliJ가 하도록, Encoding은 UTF-8형식, Annotation Processor를 사용할 수 있도록 설정해준다. 2. Converter 인터페이스 스프링의 기본 타입 변환 지원 스프링은 기본적인 타입 변환은 자동으로 지원한다. 아래 예시를 보자. helloV1 컨트롤러.. [작성중][TIL][링크]Entity에 cascade=CascadeType.PERSIST 사용 시 주의 1:N의 관계를 갖는 A.class와 B.class가 있는 경우, @OneToMany(fetct=FetchType.LAZY, mappedBy = "...", casecade = CascadeType.PERSIST) private List Bs; CascadeType.PERSIST를 하면, A 타입만 JPA를 통해 영속성 객체로 불러오더라도, B 타입도 영속성 객체로 함께 불려오게 된다. 이것 때문에 엄청 오래 삽질을 했다... 정확한 원리는 아직 모르겠지만, 둘 다 영속성 객체로 걸려있으면 실제 SQL로 CRUD 시에 서로의 값을 참조하면서 무조건 넣어주어야 하는 것 같다. 링크 내용을 읽고 향후 JPA 개념이 생기면 정확하게 이해하자! 참조 [1] [jpa] CascadeType.PERSIST를 함부로.. [TIL] Mapstruct - @Mapping 시 List의 필드값, the type of parameter has no property named Mapstruct에서 @Mapping 사용 시 source와 target에서 필드값들을 매핑할 때, "the type of parameter has no property named" 에러가 나는 경우가 있다. 이것은 source와 target 경로 지정 시, Collection 타입이 아닌 부분을 조회하여 발생했을 수 있다. 이것은 마치 List 타입 내부의 size를 알 수 없는 객체들을 또 다른 size를 알 수 없는 List의 객체들로 매핑하는 것이 되기 때문이다. 요약하자면 아래 그림과 같다. 그럼 어떻게 해야할까? general 객체용 Mapper를 하나 만들어서 매핑하고, Soldier 객체용 Mapper를 만들어서 매핑을 반복적으로 수행한 뒤, 최종 general 객체로 합치면 된다. 정확한.. [스프링 웹MVC-2] 17. API 예외 처리 - 스프링 ExceptionResolver 이전 글에서 Exception을 직접 처리하는 ExceptionResolver를 만들어보았다. Exception 종류에 따라 statusCode와 message를 넣은 뒤, ModelAndView를 반환하는 방식으로 진행했다. 이번에는 직접 만들지 않고, 스프링이 제공하는 ExceptionResolver를 편리하게 사용해본다. 1. 스프링 부트가 제공하는 ExceptionResolver 종류 스프링 부트에는 HandlerExceptionResolverComposite 이라는 파일에 다음 순서로 ExceptionResolver 들이 등록되어있다. 1. ExceptionHandlerExceptionResolver 2. ResponseStatusExceptionResolver 3. DefaultHandlerE.. [링크][중요] Mapstruct 라이브러리, DTO와 Entity 검증의 주체가 되야하는 부분 1. Mapstruct 라이브러리 DTO 와 Entity간 변환을 쉽게 해주는 라이브러리다. [1] [보통 사용자의 입력값을 PO(Parameter Object)로 받아와서 DTO로 변환한다. 그리고 DTO의 값들을 Entity에 하나씩 넣어준 뒤 DB에서 Entity를 save 또는 update 하는 방식을 사용한다. 이 과정에서 DTO를 Entity로 바꿀 때, 또는 반대로 Entity를 기반으로 DTO로 바꿀 때 사용한다.] 필드값이 100개인 Entity의 100개 필드값을 DTO를 통해서 하나씩 전달해줄려면, Entity.setXxx(DTO.getXxx) 등으로 100개의 항목을 작성해줘야할 수도 있다. 그런데 Mapstruct의 @Mapper 방식을 사용하면 한줄만으로 이런 작업을 끝낼 수도 .. [링크] @Transient 어노테이션 의미, 사용 시 유의사항 요약 @Transient 어노테이션은 @Entity 어노테이션이 정의된, 엔티티 클래스에서 사용한다. 사용목적은 JPA에서 엔티티의 필드값들을 영속성 객체로 관리하는데, 관리 대상에서 해당 필드나 메서드를 제외하기 위함이다. 예를 들어 아래와 같이 엔티티 클래스에 두 가지 필드가 존재하는 경우, private String password; @Transient private String confirmedPassword; confirmedPassword 필드는 단순 확인용이므로 데이터베이스상에 저장되는 값이 아니고, 영속성 객체로 관리될 필요도 없다. 이럴 경우 @Transient 어노테이션을 사용한다. 메서드에도 사용할 수 있는데, 필요시 관련 상세 내용은 링크에서 확인하자. 링크 https://gmoon.. [스프링 웹MVC-2] 16. API 예외 처리 - 스프링부트 기본 오류 처리, HandlerExceptionResolver 1. 서블릿 API 오류 처리 API 방식 오류 처리 이전 글에서는 4xx, 5xx 등 Http 상태코드에 따라 오류 페이지를 클라이언트에 보여주는 형식으로 처리했다. 상황에 따라 보여줄 페이지만 설정하면 되므로 상대적으로 간단한 방식이라 할 수 있다. 그러나, API 통신의 경우를 생각해보자. 만약 서버-서버간 API 통신을 한다고 생각해보면, HTML로 표현된 페이지를 보내서 통신을 할 수는 없다. 어떤 데이터 양식(ex. json 객체)으로 통신을 할지 규약을 정하고, 그에 맞게 데이터를 보내주어야 한다. 서블릿의 API 방식 오류 처리 이전 글에 이어서 진행을 했다면, WebServerCustomizer 클래스가 주석처리 되어있을 것이다. 주석을 풀고, 다시 Bean으로 등록하여 서블릿에 의해 A.. 이전 1 ··· 35 36 37 38 39 40 41 ··· 50 다음