2-7. 질문 목록 만들기

404 오류: 요청된 주소에 대해 받아주는 서버의 컨트롤러가 없을 때 발생하는 오류

템플릿 설정하기

일반적으로 스프링에서는 리턴값을 자바 코드에서 직접 만들지 않고, 템플릿 방식을 사용한다.

템플릿(template): 자바 코드를 삽입할 수 있는 HTML 형식의 파일을 말한다.

템플릿 엔진으로 Thymeleaf, Groovy 등이 있다.

Thymeleaf 설치 방법

//build.gradle
dependencies {
	implementation 'org.springframework.boot::spring-boot-starter-thymeleaf'
	implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect'
}

템플릿 사용하기

  1. src/main/resource 디렉터리에서 templates 선택 후, 새로운 파일 question_list.html 템플릿을 생성한다.
  2. question_list.html 파일에 다음 코드를 입력한다.
<h2>Hello Template</h2>
  1. QuestionController.java 파일을 작성한다.

    → ResponseBody 삭제, return “question_list”; 로 수정

    package com.mysite.sbb.question;
    
    import java.util.List;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.GetMapping;
    
    import lombok.RequiredArgsConstructor;
    
    @Controller
    public class QuestionController {
    
    	@GetMapping("/question/list")
    	public String list(Model model) {
    		return "question_list"; //파일명을 리턴
    	}
    }
    
    

Untitled

데이터를 템플릿에 전달하기

Model 객체: 화면에 데이터를 가져갈 때 사용

package com.mysite.sbb.question;

import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor //생성자 주입 방식-spring 객체를 사용 가능
@Controller
public class QuestionController {
	private final QuestionRepository questionRepository;

	@GetMapping("/question/list")
	public String list(Model model) { //매개변수를 Model로 지정하면 객체 자동 생성
		List<Question> questionList = this.questionRepository.findAll();
		model.addAttribute("questionList", questionList);
		return "question_list";
	}
}