Chapter 16 내용
- JSON 개요
- @RestController를 이용한 JSON 응답 처리
- @RequestBody를 이용한 JSON 요청 처리
- @ResponseEntity
JSON
- JSON(JavaScript Object Notation)은 간단한 형식을 갖는 문자열로 데이터 교환에 주로 사용
- 중괄호를 사용해 객체를 표현, 객체는 (이름, 값) 쌍을 갖는다.
{
- "key":"value",
- "key":"value",
- "key":"value"
}
Jackson 의존 설정
Jackson은 자바 객체와 JSON 형식 문자열 간 변환을 처리하는 라이브러리
스프링에서 사용하기 위해 의존성 추가를 해준다.
implementation "com.fasterxml.jackson.core:jackson-core:2.9.9"
implementation "com.fasterxml.jackson.core:jackson-annotations:2.9.9"
implementation "com.fasterxml.jackson.core:jackson-databind:2.9.9"
implementation "com.fasterxml.jackson.module:jackson-module-kotlin:2.9.9"
@RestController (JSON 형식 응답)
- @RestController은 스프링 MVC에서 요청한 메서드가 리턴한 객체에 맞는 형식으로 변환해서 응답 데이터로 전송한다.
@RestController //Jackson이 존재하면 JSON 형식의 문자열로 변환해서 응답한다.
public class RestMemberController {
private MemberDao memberDao;
private MemberRegisterService registerService;
@GetMapping("/api/members")
public List<Member> members() {
return memberDao.selectAll();
} //members()의 리턴타입이 list이므로, 해당 List객체를 JSON 형식의 배열로 변환해서 응답한다.
@GetMapping("/api/members/{id}")
public Member member(@PathVariable Long id, HttpServletResponse response) throws IOException{
Member member = memberDao.selectById(id);
if(member==null){
response.sendError(HttpServletResponse.SC_NOT_FOUND);
return null;
}
return member;
}
public void setMemberDao(MemberDao memberDao) {
this.memberDao = memberDao;
}
public void setRegisterService(MemberRegisterService registerService) {
this.registerService = registerService;
}
}
|
cs |
@RestController 을 Bean으로 등록해주고 실행해주면 JSON 응답 결과를 볼 수 있다.
JSON 정렬은 크롬 확장 프로그램인 json-formatter 플러그인을 사용하면 된다.
https://chrome.google.com/webstore/search/json?hl=ko
@JsonIgnore (JSON 결과 제외)
- password 같은 민감한 정보들은 표시가 되면 안 된다. 이때 사용하는 것이 @JsonIgnore
- @JsonIgnore 의 대상은 JSON 결과에서 제외된다.
@RequestBody (JSON 요청 처리)
JSON 형식의 요청 데이터를 자바 객체로 변환하려면 @RequestBody를 사용하면 된다.
@PostMapping("/api/members")
public ResponseEntity<Object> newMember(
//@RequestBody는 json형식의 문자열을 자바 객체로 변환 @RequestBody RegisterRequest regReq , HttpServletResponse response) throws IOException {
try {
Long newMemberId = registerService.regist(regReq); //가입
URI uri = URI.create("/api/members/" + newMemberId);
return ResponseEntity.created(uri).build();
} catch (DuplicateMemberException dupEx) {
return ResponseEntity.status(HttpStatus.CONFLICT).build();
}
}
|
cs |
POST 방식의 폼 데이터는 쿼리 스트링으로 전송된다. 쿼리 문자열 대신 JSON 형식을 사용하려면 별도 프로그램이 필요하다. 해당 책에서는 Advanced REST client 크롬 확장 프로그램을 사용했다.
Advanced REST client
- JSON 형식을 전송할 수 있는 확장 프로그램
ARC에서 JSON 형식의 데이터를 요청하면 응답 코드 201로 잘 처리된 것을 확인할 수 있다.
REFERENCE
초보 웹 개발자를 위한 스프링 5 프로그래밍 입문(최범균)
'공부 > Spring' 카테고리의 다른 글
[Spring] Chapter 15 - 간단한 웹 어플리케이션의 구조 (0) | 2021.07.23 |
---|---|
[Spring] Chapter 14 - Date 타입 변환, @PathVariable 경로 변수 처리, 익셉션 처리하기 (0) | 2021.07.17 |
[Spring] Chapter 12 - MVC 2 : 메시지, 커맨드 객체 검증 (1) | 2021.07.11 |
[Spring]Chapter 11 - 요청 매핑, 커맨드 객체, 리다이렉트, 폼 태그, 모델 (0) | 2021.07.11 |
[Spring] Chapter 9-10장 Intellij에서 스프링 MVC 시작하기(Spring+ Gradle + MVC) (3) | 2021.07.11 |