[Spring JPA] 전달된 Form DTO 객체를 컨트롤러가 인식하지 못하는 경우

dondonee·2023년 10월 21일
0

    @GetMapping("/tasks/new")
    public String addTaskForm(Model model) {
        model.addAttribute("taskForm", new TaskForm());
        return "task/addTaskForm";
    }

    @PostMapping("/tasks/new")
    public String addTask(@Valid TaskForm form, BindingResult result) {

        if (result.hasErrors()) {
            return "task/addTaskForm";
        }

        System.out.println(form.getName()); //테스트용

        taskService.add(form.getName(), form.getPriority());
        return "redirect:/tasks";

    }
  • 의도한 기능 :

    1. '할 일 등록' 페이지에서 Form DTO 객체를 통해 컨트롤러에 데이터 전달
    2. 컨트롤러가 서비스의 add() 메서드를 호출해 DB에 등록
  • 문제 :

    • 기입한 데이터가 할 일 목록에 출력되지 않음.
    • 컨트롤러가 받은 form DTO 객체에서 form.getXXX()를 해 보니 null이 출력됨.
    • DB에 저장된 값에도 null로 저장됨.
  • 확인한 것 :

    • HTTP 요청은 이상 없음. payload 정상 전달, 응답 코드 302로 정상 리다이렉트. (HTML, Thymeleaf 문법 이상 없음)
    • 리포지토리 및 서비스 메서드도 단위 테스트 결과 이상 없음.
  • 해결 방법 :

    • Form DTO 객체에 @Setter를 넣어주니 해결

0개의 댓글