개발 공부/Spring
[SpringBoot] Resopnse
journey
2022. 2. 16. 00:49
728x90
07. Resopnse 내려주기
String
- 일반 Text Type 응답
예제 코드
- Controller.java
@RestController
@RequestMapping("/api")
public class ApiController {
// TEXT
@GetMapping("/text")
public String text(@RequestParam String account) {
return account;
}
}
- API 결과
- Content-type이 text인 것을 확인 할 수있다.

Object
- 자동으로 Json 변환되어 응답 상태값은 항상 200 OK
예제 코드
- Controller.java
@RestController
@RequestMapping("/api")
public class ApiController {
// Json
// request -> Object mapper -> object -> method -> object -> object mapper -> json -> response
@PostMapping("/json")
public User json(@RequestBody User user) {
return user; // 200 OK
}
}
- API 결과
- Content-type이 json인 것을 확인 할 수있다.

ResponseEntity
- Body의 내용을 Object로 설정상황에 따라서 Http Status Code 설정
예제 코드
- UserDto.java
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class User {
private String name;
private int age;
// @JsonProperty("phone_number")
private String phoneNumber;
private String address;
.... getter and setter ....
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", phoneNumber='" + phoneNumber + '\'' +
", address='" + address + '\'' +
'}';
}
}
- Controller.java
@RestController
@RequestMapping("/api")
public class ApiController {
// ResponseEntity
// create http 코드 201에 대한 응답 내리기.
@PutMapping("/put")
// 응답을 내려줄 때 HttpStatus를 정해 줄 수 있다. ResponseEntity<>객체를 통해서 내려준다.
public ResponseEntity<User> put(@RequestBody User user) {
// ResponseEntity.ok(user) -> (바디) 넣기
return ResponseEntity.status(HttpStatus.CREATED).body(user);
// ResponseEntity란 곳에 명확한 http status 코드 지정하기. body에 데이터 넣기. 데이터도 오브젝트 매퍼를 통해서 json으로 바뀌어져서 내려간다.
// 여러가지 값들에게 각각의 응답에 대한 커스터마이징이 필요할 때 사용한다. 명확하게 값을 만들어서 값을 만들어낸다.
}
}
- HttpStatus.java

- API 결과
- HttpStatus Code가 201인 것을 확인할 수있다.

@ResponseBody
- RestController가 아닌 곳(Controller)에서 Json 응답을 내릴 때
1. 실제 html 리턴하기 - 예제 코드
- 컨트롤러 return 자체가 String이 되면 자동으로 resource폴더에 있는 html 파일을 찾아간다.
- Controller.java
@Controller
public class PageController {
// 실제 html 페이지를 리턴하는 컨트롤러.
@RequestMapping("/main")
public String main() {
return "main.html";
}
}
- main.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Main Html Spring Boot</h1>
</body>
</html>
- API 결과

- html 결과

- 하이어라키 구조

2. json 객체 리턴하기- 예제 코드
- Controller.java
@Controller
public class PageController {
// json 내리기
// ResponseEntity
@ResponseBody // 객체를 resource에서 찾지 않고 ResponseBody로 만들어서 json객체로 리턴하겠다.
@GetMapping("/user")
public User user() {
var user = new User(); // 타입 추론
user.setName("짱구");
user.setAddress("떡잎마을");
return user;
}
}
- API 결과
- phone_number 셋팅을 안해줬기 때문에 null 값이 나온다.

- UserDto.java
@JsonInclude(JsonInclude.Include.NON_NULL)
을 추가한다.- json의 null값을 제외하기. 속성으로 지정할 수있다. 보통은 그냥 안 쓴 상태인 default로 둔다.
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
@JsonInclude(JsonInclude.Include.NON_NULL) // json의 null값을 제외하기. 속성으로 지정할 수있다. 보통은 그냥 default로 둔다.
public class User {
private String name;
private int age;
// @JsonProperty("phone_number")
private String phoneNumber;
private String address;
..... getter and setter ....
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", phoneNumber='" + phoneNumber + '\'' +
", address='" + address + '\'' +
'}';
}
}
- API 결과
- null값은 제외 된 상태로 결과가 나온다.
