요르딩딩
DTO를 사용해보자 본문
728x90
반응형
기존에는
HttpServletRequest의 객체를 RequestUtil을 사용하여, getParameter()값을 모두 map으로 전환하여, 사용하였다.
이렇게 사용하게되면, request Parameter로 어떤 값을 받던지, 모두 컨트롤러로 들어오기때문에, 개발자 입장에서는 DTO를 생성할 필요없이 편리하게 개발할 수 있었다.
( RequestUtil.paramToHashMap(request); )
다만, 원리상 DTO를 사용하게 되면, 보안적인 측면에서도 좋고, 요청 파라미터에 매핑 오류시, 컨트롤러에 들어오기전에 걸러낼 수 있기때문에 더 효율적이라고 한다. 그렇기에 이번시간에는 DTO를 적용한 테스트를 진행해보았습니다.
1. Dto 생성에 있어서 @Getter, @Setter는 자동생성해 주는 어노테이션이다. 이것을 적용하기 위해서는 pom.xml에 lombok를 적용시켜줘야 한다.
[pom.xml]
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
2. Dto를 생성해보자. 이제 lombok를 추가했으므로, @Getter, @Setter 적용가능.
- @JsonProperty 어노테이션은 객체를 JSON 형식으로 변환할 때 Key의 이름을 설정하여, 매핑시킬 수 있습니다.
- @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) : 스네이크 형식을 카멜형식에 맞도록 전체 매핑 시킬 수 있습니다.
[Dto생성]
package com.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class TestDto {
private long no;
private String firstName;
private String secondName;
// @JsonProperty("pluse_map")
private String pluseMap; // JSON Object를 stringify한 값
}
3. @RequestBody를 활용하여 Dto 사용하기.
[Dto 적용 Controller]
package com.controller;
import java.io.IOException;
import java.util.HashMap;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.dto.TestDto;
import com.util.JsonUtil;
import lombok.RequiredArgsConstructor;
@CrossOrigin(origins = "*", maxAge = 3600)
@RestController
@RequiredArgsConstructor
@RequestMapping("/dto")
public class DtoController {
@SuppressWarnings("unchecked")
@PostMapping("/test")
public ResponseEntity<?> test(@RequestBody TestDto testDto) throws IOException {
long no = testDto.getNo();
String firstName = testDto.getFirstName();
String secondName = testDto.getSecondName();
String pluseMapSt = testDto.getPluseMap();
HashMap<String, Object> pluseMap = JsonUtil.toHashMapObject(pluseMapSt); // JSON Object의 String을 Map으로 변환한 값
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("no" , no);
map.put("first_name" , firstName);
map.put("second_name", secondName);
map.put("pluse_map" , pluseMap);
return ResponseEntity.ok(map);
}
}
[결과]
728x90
반응형
'[Web] > [Spring]' 카테고리의 다른 글
[Spring] branch 생성 및 적용하는법 (0) | 2022.09.20 |
---|---|
JUnit 테스트하는 방법 (0) | 2022.09.14 |
Spring SQL log 남기기 (0) | 2022.07.07 |
@RequestBody로 body데이터 꺼내기 (0) | 2022.04.21 |
[뉴렉처] Spring MVC 강의 (1,2,3,4,5) (0) | 2022.03.14 |
Comments