본문 바로가기
Spring

Response 내려주기

by step 1 2021. 6. 12.
반응형

응답하는 방법은 두가지로 나뉘어 진다.

  • 데이터형식으로 응답하는 형태: @RestController 어노테이션 사용
  • 페이지형식(HTML 등)으로 응답하는 형태: @Controller 어노테이션 사용

테스트 진행을 위한 DTO 생성

@JsonInclude을 사용하면 데이터를 응답할 때 null 값을 제외하고 보낼 수 있다.

int형을 Integer로 변경하면 기본값이 0에서 null값으로 변경된다.

package com.example.response.dto;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;

// snakecase로 변환
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
// 응답하는 데이터가 null일 경우 제외
@JsonInclude(JsonInclude.Include.NON_NULL)
public class User {
    private String name;
    // Integer로 지정할 경우 기본값이 null로 입력, int는 기본값 0
    private Integer age;
    private String phoneNumber;
    private String address;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", phoneNumber='" + phoneNumber + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

@RestController를 사용하는 예제

text 응답

// 데이터 형태로 응답하는 controller
@RestController
@RequestMapping("/api")
public class ApiController {

    //TEXT
    @GetMapping("/text")
    public String text(@RequestParam String account){
        return account;
    }
}

 

Json 응답

   //JSON
    // 동작 순서: req -> object mapper -> object -> method -> object -> object method -> json -> response
    @PostMapping("/json")
    public User json(@RequestBody User user){

        return user;  // 200 OK
    }

 

ResponseEntity를 사용하여 사용자가 직접 응답 형태를 수정하는 방법

    // ResponseEntity: 응답을 사용자가 직접 수정 가능(명확하게 데이터를 내려줄 수 있다.)
    @PutMapping("/put")
    public ResponseEntity<User> put(@RequestBody User user) {

//        응답을 201코드로 전달
        return ResponseEntity.status(HttpStatus.CREATED).body(user);
    }

 

 

@Controller를 사용하는 예제

 

페이지를 호출

public class PageController {

    @RequestMapping("/main")
    public String main(){
        return "main.html";
    }
}

 

@Controller를 사용하는 클래스 내에서 Json 형태로 데이터를 내려주는 방법: ResponseEntity

  @ResponseBody
    @GetMapping("/user")
    public User user(){
        //User user = new User();
        // java 11버전부터 사용 가능 (타입 추론)
        var user = new User();
        user.setName("gggii");
        user.setAddress("서울");
        return user;
    }

 

가장 좋은 방법은 각자 역할에 맞는 Controller를 각각 만들어서 처리하는 것이 좋다

(페이지 이동 controller와 데이터 전달 Controller 구분)

반응형

'Spring' 카테고리의 다른 글

Spring 핵심  (0) 2021.06.12
Object Mapper  (0) 2021.06.12
Delete API  (0) 2021.06.12
PUT API  (0) 2021.06.12
Post API  (0) 2021.06.12