[Spring] MVC Controller / Postman / Thymeleaf / Exception 처리

jngyoon·2023년 10월 11일
0

혼공일기

목록 보기
18/24

#230926 수업 복습

😎Spring MVC Controller 특징

HttpServletRequest, HttpServletResponse를 거의 사용할 필요 없이 구현
다양한 타입의 파라미터 처리, 다양한 타입의 리턴 타입 사용 가능
GET 방식, POST 방식 등 전송 방식에 대한 처리를 어노테이션으로 처리 가능
상속/인터페이스 방식 대신 어노테이션으로 간단하게 매핑 처리 가능

controller 패키지 생성

SampleController.java 클래스 생성

package com.kh.demo.controller;

import java.util.ArrayList;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.kh.demo.dto.SampleDTO;

@Controller
@RequestMapping("/sample/*")
public class SampleController {
	
//	@GetMapping("")
//	public String empty() {
//		System.out.println("======== ========");
//		return "a";
//	}
	
	@RequestMapping("basic")
	public void asklgjsalekgjsalkg() {
		System.out.println("========basic========");
	}
	
	@GetMapping("basic1")
	public void basicGet(int age) {
		System.out.println("========get 방식으로 요청========");
		System.out.println("age : "+age);
	}
	
	@PostMapping("basic1")
	public void basicPost(int age) {
		System.out.println("========post 방식으로 요청========");
		System.out.println("age : "+age);
	}
	
	@RequestMapping(value = "basic2", method = {RequestMethod.GET,RequestMethod.POST})	//여러개를 한번에 매핑 가능(어떤 방식이든 basic2로 요청하면 여기로 매핑) <- 지양
	public void basic2() {
		System.out.println("========get, post 방식으로 요청========");
	}
	
	//DTO 객체로 수집하기
	@GetMapping("test01")
	public void test01(SampleDTO dto) {
		System.out.println(dto);
	}
	
	//파라미터 명과 담을 변수명이 다른 경우 수집방법
	@GetMapping("test02")
	public void test02(@RequestParam("data1") String name, @RequestParam("data2") int age) {
		System.out.println(name+" / "+age);
	}
	
	//파라미터가 같은 이름으로 여러개 날라오는 경우 수집방법
	@GetMapping("test03")
	public void test03(@RequestParam("data") String[] datas, Model model) {
		model.addAttribute("datas",datas);
	}
	
	@GetMapping("test04")
	public void test04(@RequestParam("data") ArrayList<Integer> datas, Model model) {
		model.addAttribute("datas",datas);
	}
	
	@GetMapping("test05")
	public void test05() {
		String str = null;
		str.charAt(10);
	}
}

Postman(포스트맨)

https://www.postman.com/downloads > 다운로드 버튼 클릭
> 설치파일 실행 > 계정 로그인

여러 방식의 요청을 외부에서 보낼 수 있도록 도와주는 개발 툴
GET, POST 외에도 PUT, DELETE 등의 요청도 가능하다.

Get방식 요청

Params 선택 > Query Params에 요청사항(Key, value) 작성 > Send

Post방식 요청

Body 선택 > x-www-form-urlencoded > 요청사항(Key, value) 작성 > Send

Thymeleaf(타임리프)

웹 애플리케이션의 뷰(화면)를 생성하기 위한 자바 템플릿 엔진
HTML, XML, JavaScript, CSS 등의 마크업 언어를 지원하며,
다른 템플릿 엔진들과 달리 뷰 템플릿 파일 자체도 유효한 마크업 문서이다. 
템플릿 파일이 개발자와 디자이너 모두에게 친숙한 문법으로 작성될 수 있도록 하는 장점이 있다. 
또한 Thymeleaf는 서버 측에서 렌더링되므로 
클라이언트 측에서 추가적인 로딩 없이 바로 렌더링 결과를 확인할 수 있다. 
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"> <!-- xmlns : xml에서 참고할 문서 / th="http://www.thymeleaf.org"를 적어주면 타임리프 문법을 사용할 수 있고 타임리프 문법으로 해석함->
	<head>
		<title>test03</title>
	</head>
	<body>
		<h2>test03</h2>
		<th:block th:each="data : ${datas}">  <!-- th:each = 타임리프에서의 for문 ->
			[[${data}]]<br>  <!-- 텍스트로 표현할때는 [[ ]]로 묶어야   ->
		</th:block>
	</body>
</html>

Exception 처리

application.properties 파일에 예외처리에 대한 설정들을 작성
templates 폴더 내에 설정해둔 경로로 오류코드.html 을 생성

application.properties

#브라우저 요청에 대해 서버 오류시 기본으로 제공되는 페이지를 사용할지 여부 설정(true, false)
server.error.whitelabel.enabled=false  
	#false => 오류시 404 에러 페이지 
    
#오류 응답을 처리할 핸들러의 PATH
server.error.path=/error
	#404 에러시, src/main/resources/templates/error 폴더를 찾아 '404.html'을 찾아 보여줌
    #500 서버 에러시, src/main/resources/templates/error 폴더를 찾아 '500.html'을 찾아 보여줌
    
#오류 응답에 exception을 포함할지 여부(true, false)
server.error.include-exception=true

#오류 응답에 stacktrace 내용을 포함할지 여부(always, never, on_trace_param)
server.error.include-stacktrace=always

0개의 댓글