반응형
응답하는 방법은 두가지로 나뉘어 진다.
- 데이터형식으로 응답하는 형태: @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 |