[Spring Boot] Client에게 응답 보내기

SeongWon Oh·2021년 8월 24일
4

Spring Framework

목록 보기
8/33
post-thumbnail

HTTP Method들을 사용하여 Client가 Server에게 요청을 보내는 작업을 하게 되면 Server는 clint에게 받은 응답에 대해 작업을 하고 그에 맞는 데이터나 메시지를 보내며 서로 소통을 할 것이다.

오늘은 HTTP Method들을 사용하며 client의 요청에 서버가 응답을 보내는 여러 방법들에 대해 알아볼 것이다.

Response 보내기

Text로 보내기

가장 먼저 client에게 text로 응답을 보내는 코드를 보고자 한다.
아래의 방법은 가장 기본적인 방법으로 return type이 String인 method를 생성하여 응답하고 싶은 내용을 보내주면 된다.

@RestController
@RequestMapping("/api")
public class ApiController {

    // Text
    @GetMapping("/text")
    public String text(@RequestParam String account){
        return "Account : " + account;
    }
}
결과를 보면 GET request의 parameter로 간 account를 잘 받고 Account : user100라는 결과를 응답한 것을 확인할 수 있다.

JSON으로 응답하기

Json타입으로 응답을 보낼때는 class를 생성하여 보내야한다.
Request로부터 Response까지 전반적인 순서를 설명하면 다음과 같다. 먼저 Client가 Server에게 Request를 보내면 Server에서 object mapper가 Object를 생성한 뒤 해당 object를 통해 요청에 따른 method를 수행한다. method의 수행을 마치면 결과를 다시 object mapper를 통해 json을 만들고 client에게 response를 보내는 순서로 진행이 된다.

진행 순서
request -> object mapper -> object -> method -> object mapper -> json -> response

ApiController.java

@RestController
@RequestMapping("/api")
public class ApiController {

    @PostMapping("/json")
    public User json(@RequestBody User user){
        return user;
    }

User.java

@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class User {
    private String user;
    private int age;
    private String phoneNumber;
    private String address;
    
    ....
}

Page소스를 보내기

Page 소스를 보내며 응답하는 방법법은 이전 방법과 다르게 annotation을 @RestController이 아닌 controller를 붙인다.
controller는 return 자체가 string이 되면 자동으로 resource에 있는 html파일을 찾아가게 된다.

@Controller
public class PageController {

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

}

Response Customizing

ResponseEntity

프로그래밍을 하며 Response에 대해서 customizing이 필요하면 ResponseEntity를 사용해야한다.

아래 예시 코드는 Response를 보낼 때 http status의 출력을 정해주는 코드이다.

@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
@PutMapping("/put")
    public ResponseEntity<User> put(@RequestBody User user) {

        return ResponseEntity.status(HttpStatus.CREATED).body(user);
        // HttpStatus.CREATED는 201을 출력하게 한다.
        // body에는 data를 넣어준다.

    }
}

ResponseBody

앞서 Page를 response하는 방법에 나왔던 controller는 annotation은 return값이 String이면 html파일을 찾게 된다. Controller가 붙은 class에서 다른 type의 response를 보내고 싶다면 ResponseBody를 붙여주어야한다. ResponseBody를 붙여주면 return했을 때 resource(html파일)을 찾지 않고 ResponseBody를 만들어 보낸다.

아래의 예시는 controller annotaiton이 붙은 class에서 ResponseBody를 만들어 json type으로 response를 보내는 예시이다.

@Controller
public class PageController {
    @ResponseBody
    @GetMapping("/user")
    public User user(){
        var user = new User();
        // var는 타입추론을 해서 맞춰준다.
        user.setUser("오성원");
        user.setAddress("용인시");
        return user;
    }
}
profile
블로그 이전했습니다. -> https://seongwon.dev/

0개의 댓글