인프런 워밍업 클럽 스터디 0기
BE 2일차
ObjectMapper는 객체를 json형태로 직렬화 또는 역직렬화해주는 라이브러리이다.
dependency로 spring-boot-starter-web을 추가하면 다운로드되는 jackson이라는 라이브러리에 속해있다.
우리가 @RequestBody를 붙여줬을 때 SpringBoot는 ObjectMapper을 이용해 데이터를 직렬화/역직렬화 한다.
ObjectMapper의 기본 설정은 public 필드 또는 public 형태의 getter만 접근 가능하다.
{
"add" : 덧셈결과,
"minus" : 뺄셈결과,
"multiply" : 곱셈결과
}
public class CalculatorRequest {
private int num1;
private int num2;
public CalculatorRequest(int num1, int num2) {
this.num1 = num1;
this.num2 = num2;
}
public int getNum1() {
return num1;
}
public int getNum2() {
return num2;
}
}
public class CalculatorResponse {
private int add;
private int minus;
private int multiply;
public CalculatorResponse(CalculatorRequest request) {
this.add = request.getNum1()+ request.getNum2();
this.minus = request.getNum1()-request.getNum2();
this.multiply = request.getNum1()* request.getNum2();
}
public int getAdd() {
return add;
}
public int getMinus() {
return minus;
}
public int getMultiply() {
return multiply;
}
}
@GetMapping("/api/v1/calc")
public CalculatorResponse calculator(CalculatorRequest request){
return new CalculatorResponse(request);
}
{
"dayOfTheWeek" : "MON"
}
import java.time.LocalDate;
public class DayRequest {
LocalDate date;
public DayRequest(LocalDate date) {
this.date = date;
}
public LocalDate getDate() {
return date;
}
}
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Year;
import java.time.format.TextStyle;
import java.util.Locale;
public class DayResponse {
private String dayOfTheWeek;
public DayResponse(DayRequest request) {
LocalDate today = request.getDate();
this.dayOfTheWeek = today.getDayOfWeek()
.getDisplayName(TextStyle.SHORT, Locale.US)
.toUpperCase();
}
public String getDayOfTheWeek() {
return dayOfTheWeek;
}
}
@GetMapping("/api/v1/day-of-the-week")
public DayResponse dayOfTheWeek(DayRequest request){
return new DayResponse(request);
}
HTTP Method : POST
Path : /api/v1/sum
HTTP Body Message
{
"numbers" : [1,2,3,4,5]
}
반환 결과 : String or Int형
import java.util.List;
public class SumRequest {
private List<Integer> numbers;
public SumRequest(){}
public SumRequest(List<Integer> numbers) {
this.numbers = numbers;
}
public List<Integer> getNumbers() {
return numbers;
}
}
@PostMapping("/api/v1/sum")
public int listSum(@RequestBody SumRequest request){
int sum = request.getNumbers().stream().mapToInt(Integer::intValue).sum();
return sum;
}
api를 호출했을 때 500 error가 발생했다.
SumRequest 클래스에 기본 생성자가 없어서 오류가 발생했다.
생성자에 인자가 1개일 경우엔 기본 생성자가 있어야한다.
기본 생성자를 추가하니 해결되었다.
이외에 생성자 위에 @JsonCreator를 붙여줘도 해결된다.
참고
https://bjp5319.tistory.com/53
https://mangkyu.tistory.com/223