Java/spring

4/19 정리

Annotation

  컨트롤러에 붙여야 하는 것 - @RestController(@Controller + @ResponseBody), @RequestMapping(‘URI’)

  응답에 null값을 포함하지 않으려면? - @JsonInclude(JsonInclude.Include.NON_NULL)

                                                   이외에도 다양한 속성을 추가해줄 수 있다.

  @NonNull : 클래스 속성에 null값 불가능

 

Response 내려주기

  1. plain text : 단순 텍스트 리턴, 거의 안씀

  2. json

     RequestBody로 객체 형태를 받으면 request -> object mapper -> 객체로 변환된다.

     마찬가지로 Response로 객체를 리턴하면 객체 -> object mapper -> json -> response로 변환된다.

  3. HTML 파일

     @RestController 대신 @Controller 어노테이션을 사용하고, 리턴값에 html 파일 이름(확장자 포함)을 붙여주면 resources/static 폴더 아래에서 해당 html 파일을 찾아 리턴해준다.

 

응답을 snake case로 보내려면 dto의 속성에 @JsonProperty 어노테이션을 통해 이름을 바꿔주거나, 일괄적으로 바꾸려면 클래스 자체에 @JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)를 달아주면 된다.

위의 방법으로 응답을 snake case로 바꿨을 때는 요청 역시 snake case로 바꿔줘야 한다.

 

응답 시 HTTP status를 설정하려면 리턴형식을 ResponseEntity로 선언한다.

ex) ResponseEntity.status(HttpStatus.CREATED).body(user);

 

 

Object Mapper

   텍스트 형태의 json을 객체(object)로 바꿔주고, 반대로 객체(object)를 텍스트 형태의 json으로 바꿔주는 역할을 한다.

   1. object -> text

       - objectMapper.writeValueAsString(object); 를 사용한다.

       - text 형식으로 바꾸기 위해 object의 getter를 이용한다.

 

   2. text -> object

       - objectMapper.readValue(String, object.class); 를 사용한다.

       - Default 생성자를 필요로 한다.

       - 주의점 : 이러한 방식을 사용하는 객체는 get으로 시작하는 메소드 사용에 주의해야 한다. get으로 시작하는 메소 드들은 전부 deserialize 대상에 들어가기 때문

 

 

JPA

  학습 목표

     1. JPA 기본 정의를 알고, 설명이 가능하도록

     2. JPA를 프로젝트에 적용 가능

     3. JPA의 중/고급 활용을 통해 persistance layer에 대해 모두 숙지할 수 있음

 

 

H2 DB

  메모리 안에서 동작하는 데이터베이스 -> 속도가 빠름, 저장 공간 작음 -> 테스트 용도로 사용

 

 

application.properties vs application.yml

   두 파일의 형식은 거의 동일하지만, yml 파일은 계층구조로 설정값을 표현할 수 있으며, prefix의 중복 제거가 가능해진다. -> yml 파일이 좀 더 편리함.

 

test 디렉토리 하위에 resources/data.sql 파일을 만들면 테스트를 할때만 해당 sql문을 적용시킨다. main 디렉토리에 넣으면 실제 서버를 구동할 때 해당 sql문이 적용된다.

'Java > spring' 카테고리의 다른 글

Spring 계층 구조  (0) 2021.02.07
Spring batch - 1. 기본 개념  (0) 2021.02.05
@Controller vs @RestController  (0) 2021.01.26