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 |