질문

DTO에 어떤 생성자를 추가해야되는지 궁금합니다.

 

1번

RequestDTO에 기본 생성자가 없을 때(매개변수가 있는 생성자만 있었을 때) 오류 안남

 

3번

RequestDTO에 기본 생성자가 없을 때(매개변수가 있는 생성자만 있었을 때) 오류남

기본생성자를 추가하니까 API가 잘 작동함

 

 

1번은 GET이고 3번은 POST라서 이런 차이가 있는건가 싶은 생각이드는데

정확한 이유를 모르겠습니다.

원인이 무엇이고 생성자에 어떤식으로 맵핑?이 되는건가요?

 

 

1번 코드

    @GetMapping("/api/v1/calc")
    public CalcResponse calc(CalcRequest request){ // @RequestParam
//        return new CalcResponse(request.getNum1() + request.getNum2(),
//                request.getNum1() - request.getNum2(),
//                request.getNum1() * request.getNum2());

        return new CalcResponse(request.getNum1(), request.getNum2());
    }
package com.group.libraryapp.assignment.dto.request;

public class CalcRequest {
    private int num1;
    private int num2;

    public CalcRequest(int num1, int num2) {
        this.num1 = num1;
        this.num2 = num2;
    }

    public int getNum1() {
        return num1;
    }

    public int getNum2() {
        return num2;
    }
}
package com.group.libraryapp.assignment.dto.response;

public class CalcResponse {
    private int add;
    private int minus;
    private int multiply;

//    public CalcResponse(int add, int minus, int multiply) {
//        this.add = add;
//        this.minus = minus;
//        this.multiply = multiply;
//    }

    public CalcResponse(int num1, int num2){
        this.add = num1 + num2;
        this.minus = num1 - num2;
        this.multiply = num1 * num2;
    }

    public int getAdd() {
        return add;
    }

    public int getMinus() {
        return minus;
    }

    public int getMultiply() {
        return multiply;
    }
}

======================

3번

 

   @PostMapping("/api/v1/nums-sum")
    public Integer sum(@RequestBody SumRequest nums){
        Integer result = 0;
        for(Integer num : nums.getNums()){
            result += num;
        }
        return result;
    }
package com.group.libraryapp.assignment.dto.request;

import java.util.List;

public class SumRequest {
    private List<Integer> nums;


    public SumRequest(List<Integer> nums) {
        this.nums = nums;
    }

    public List<Integer> getNums() {
        return nums;
    }
}

위의 코드는 기본생성자가 없어서 500에러 뜸

 

 

아래 코드와 같이 기본 생성자 추가하니까 성공

package com.group.libraryapp.assignment.dto.request;

import java.util.List;

public class SumRequest {
    private List<Integer> nums;

// *********** 추가 *****************
    public SumRequest() {
    }

    public SumRequest(List<Integer> nums) {
        this.nums = nums;
    }

    public List<Integer> getNums() {
        return nums;
    }
}

 

 

댓글을 작성해보세요.

채널톡 아이콘