
로직 : 컨트롤러가 엔드포인트에서 request를 받으면 CalculatorField 객체가 request의 getNum1 메소드와 getNum2 메소드를 사용하여 필드값으로 저장하게 되고 컨트롤러는 이 객체를 toString메소드로 리턴하게 된다.
컨트롤러
@RestController
public class CalculatorController {
@GetMapping("/api/v1/calc") // GET /add
public String addTwoNumbers(CalculatorRequest request) {;
CalculatorField result = new CalculatorField(
request.getNum1()+ request.getNum2(), request.getNum1() -request.getNum2(), request.getNum1() * request.getNum2());
return result.toString();
}
리퀘스트는 강의안과 필드명만 다르다
CalculatorFiled 클래스
public class CalculatorField {
private final int add;
private final int minus;
private final int multiply;
public CalculatorField(int add, int minus, int multiply) {
this.add = add;
this.minus = minus;
this.multiply = multiply;
}
@Override
public String toString() {
return "{\n " +
"\"add:\"" + add +
",\n \"minus:\"" + minus +
",\n \"multiply\":" + multiply +
"\n}";
}
}
로직 : 컨트롤러가 엔드포인트에서 String 타입으로 request를 받으면 LocalDate 객체를 사용하여 parse로 request의 String을 할당해주고 getDayofWeek 메소드로 요일로 변경한다.
컨트롤러
package com.group.libraryapp.controller.assignment;
import com.group.libraryapp.dto.assignment.request.DateRequeset;
import org.springframework.data.jpa.convert.threeten.Jsr310JpaConverters;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.DayOfWeek;
import java.time.LocalDate;
@RestController
public class DateController {
@GetMapping("/api/v1/dayweek")
public String DateControl(DateRequeset request){
LocalDate dateWeek = LocalDate.parse(request.getDate());
return "{\n \"dayOfTheWeek\": \""+dateWeek.getDayOfWeek()+"\"\n}";
}
}
request
package com.group.libraryapp.dto.assignment.request;
import java.text.DateFormat;
import java.time.LocalDate;
public class DateRequeset {
private final String date;
public DateRequeset(String date) {
this.date = date;
}
public String getDate() {
return date;
}
}
로직 : 위의 로직들과 유사하되, POST는 RequestBody 어노테이션을 사용하기 위해 이에 걸맞는 조취를 취해줘야 했다.
1안 - 컨트롤러
package com.group.libraryapp.controller.assignment;
import com.group.libraryapp.dto.assignment.request.SumRequest;
import jakarta.persistence.criteria.CriteriaBuilder;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SumController {
@PostMapping("api/v1/add")
public int returnAdd(@RequestBody SumRequest request){
Integer[] numbers = request.getNumbers();
int result = 0;
for(int i:numbers){
result += i;
}
return result;
}
}
Request - @JsonCreator와 @JsonProperty("numbers")로 private한 필드에서도 @RequestBody가 접근할 수 있도록 했다.
package com.group.libraryapp.dto.assignment.request;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
public class SumRequest {
private final Integer[] numbers;
@JsonCreator
public SumRequest(@JsonProperty("numbers") Integer[] numbers) {
this.numbers = numbers;
}
public Integer[] getNumbers() {
return numbers;
}
}
2안 - 그냥 request의 필드에서 final을 쓰지 않고 setter 추가하기
컨트롤러
@RestController
public class SumController {
@PostMapping("api/v1/add")
public int returnAdd(@RequestBody SumRequest request){
Integer[] numbers = request.getNumbers();
int result = 0;
for(int i:numbers){
result += i;
}
return result;
}
}
Request - 생성자 대신 setter를 사용했다. setter는 @RequestBody에서 자체적으로 사용하기 때문에 컨트롤러에서는 setter를 사용하지 않아도 되었다.
package com.group.libraryapp.dto.assignment.request;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
public class SumRequest {
private Integer[] numbers;
public Integer[] getNumbers() {
return numbers;
}
public void setNumbers(Integer[] numbers) {
this.numbers = numbers;
}
}