본문 바로가기

공부/Spring

[Spring] Chapter 16 - JSON 응답과 요청 처리, Jackson gradle 의존설정, Advanced REST Client(ARC)


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 정렬은 크롬 확장 프로그램인 json-formatter 플러그인을 사용하면 된다.

 

https://chrome.google.com/webstore/search/json?hl=ko 

 

Chrome 웹 스토어

Chrome에 사용할 유용한 앱, 게임, 확장 프로그램 및 테마를 찾아보세요.

chrome.google.com

 

 

 @JsonIgnore (JSON 결과 제외)


 

 - password 같은 민감한 정보들은 표시가 되면 안 된다. 이때 사용하는 것이 @JsonIgnore

- @JsonIgnore 의 대상은 JSON 결과에서 제외된다.

JSonIgnore

 

 

@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 형식을 전송할 수 있는 확장 프로그램

 

https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo?hl=ko 

 

Advanced REST client

The web developers helper program to create and test custom HTTP requests.

chrome.google.com

 

 

JSON 테스트

 

ARC에서 JSON 형식의 데이터를 요청하면 응답 코드 201로 잘 처리된 것을 확인할 수 있다.

 

 

REFERENCE


 초보 웹 개발자를 위한 스프링 5 프로그래밍 입문(최범균)

 

300x250