package com.example.response.controller;

import com.example.response.dto.User;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

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

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

    // JSON
    // req -> object mapper -> object -> method -> object -> object mapper -> json -> response
    @PostMapping("/json")
    public User json(@RequestBody User user) {
        return user;
    }


    // ResponseEntity
    @PutMapping("/put")
    public ResponseEntity<User> put(@RequestBody User user){
        return ResponseEntity.status(HttpStatus.CREATED).body(user);
    }


}

1. text
    plain/text가 응답으로 반환한다.
    
2. JSON
    object mapper가 요청을 object로 변환 후 DTO클래스에 매칭시킨다. 
    객체를 응답으로 직접 내려줄 경우 object mapper가 해당 클래스를 JSON형태로 반환한다.
    
3. ResponseEntity
    헤더, 응답 코드 등등 응답에 대한 커스터마이징이 필요한 경우 반환타입으로 ResponseEntity를 활용한다.

 

package com.example.response.dto;

import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonNaming;

@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public class User {
    private String name;
    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 + '\'' +
                '}';
    }
}

 

뷰(페이지)를 반환하는 @Controller 어노테이션

 

@Controller는 뷰를 반환하는 반면, @RestController는 JSON이나 XML과 같은 형식으로 데이터를 직접 반환합니다.

@RestController는 @Controller와 @ResponseBody를 결합한 어노테이션으로, 모든 메서드가 응답 본문으로 데이터를 반환하도록 설정합니다. 주로 RESTful API에서 사용됩니다

@Controller 선언 후 응답 결과를 String 값을 반환하면 해당 파일을 리소스 폴더에서 찾아서 반환한다.

 

package com.example.response.controller;

import com.example.response.dto.User;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class PageController {

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

//   아래의 경우는 뷰(페이지)가 아니므로 일반적으로 사용 되지 않음  
//    //ResponseEntity
//    @GetMapping("/user/{userId}")
//    public ResponseEntity<User> user(@PathVariable String userId){
//        var user = new User();
//        user.setName("Jack");
//        user.setAddress("Seoul");
//        return ResponseEntity.status(HttpStatus.CREATED).body(user);
//    }
//
//    @GetMapping("/user")
//    @ResponseBody
//    public User user2(){
//        var user = new User();
//        user.setName("Jack");
//        user.setAddress("Seoul");
//        return user;
//    }

}

 

'Spring' 카테고리의 다른 글

IoC와 DI  (0) 2025.03.19
ObjectMapper  (0) 2025.03.18
REST API 시작하기  (0) 2025.03.18
Decorator pattern(데코레이터 패턴)  (0) 2021.04.18
Proxy pattern(프록시 패턴)  (0) 2021.04.16

+ Recent posts