Spring 02

이산·2023년 6월 27일

@PostMapping / @GetMapping

  • HTTP POST와 GET 요청을 처리하는 핸들러 메소드를 정의하는데 사용
  • 이 두 애너테이션은 각각 POST와 GET 요청을 처리하는 메소드를 지정하는데 사용

@PostMapping

- HTTP POST 요청을 처리하는 메소드를 정의할 때 사용됩니다.
- POST 요청은 클라이언트가 서버에 데이터를 전송할 때 사용되는 메소드입니다. 
  일반적으로 데이터를 서버로 전송하고 처리하는데 사용됩니다.
- @PostMapping 애너테이션은 요청된 URL 경로와 일치하는 메소드를 실행하고, 
  요청 바디의 데이터를 메소드의 매개변수에 바인딩합니다.
  

@GetMapping

- HTTP GET 요청을 처리하는 메소드를 정의할 때 사용됩니다.
- GET 요청은 서버에서 데이터를 가져오는데 사용되는 메소드입니다. 
  일반적으로 데이터를 조회하거나 검색하는데 사용됩니다.
- @GetMapping 애너테이션은 요청된 URL 경로와 일치하는 메소드를 실행하고, 
  요청의 쿼리 파라미터나 경로 변수를 메소드의 매개변수에 바인딩합니다.
예시
	@RestController
	@RequestMapping("/users")
	public class UserController {

    	@PostMapping
    	public ResponseEntity<User> createUser(@RequestBody User user) {
        	// 사용자 생성 로직
        	// ...
        	return ResponseEntity.ok(createdUser);
    	}

    	@GetMapping("/{userId}")
    	public ResponseEntity<User> getUserById(@PathVariable Long userId) 	{
        	// userId를 사용하여 사용자 정보 조회 로직
        	// ...
        	return ResponseEntity.ok(user);
    	}
	}
    
> @PostMapping 애너테이션은 /users 경로로의 POST 요청을 처리하는 createUser() 메소드를 정의
> 클라이언트가 JSON 형식으로 전송한 사용자 데이터는 @RequestBody를 통해 User 객체로 바인딩되어 처리

> @GetMapping 애너테이션은 /users/{userId} 경로로의 GET 요청을 처리하는 getUserById() 메소드를 정의
> 클라이언트가 /users/123과 같은 경로로 요청을 보낼 때, 
  {userId} 부분은 @PathVariable을 통해 userId 매개변수에 바인딩되어 사용자 정보를 조회하는 데 사용

!!

<li th:each="answer : ${question.answerList}" th:text="${answer.content}">
       <div th:text="${answer.id}"></div>
       <div th:text="${answer.createDate}"></div>
   </li>
   
   >> 해당 코드에서는 th:text="${answer.content}" 를 th:each=""와 같은 구문에 들어가있기
      때문에 <li>내부의 모든 출력들이 무시되고 th:text="${answer.content}"만 출력된다.
✍ 해당 두 구문의 차이

<link rel="stylesheet" type="text/css" href="/bootstrap.min.css">
<link rel="stylesheet" type="text/css" th:href="@{/bootstrap.min.css}">

 1. 정적 경로와 템플릿 경로

	- href="/bootstrap.min.css"는 정적 경로를 사용하여 bootstrap.min.css 파일을 로드합니다. 
      이는 상대 경로나 절대 경로에 해당하는 파일의 위치를 기준으로 CSS 파일을 찾습니다.
	
	- th:href="@{/bootstrap.min.css}"는 Thymeleaf 템플릿 엔진의 문법을 사용하여 상대 경로나 
      절대 경로에 해당하는 CSS 파일의 위치를 찾습니다. @{/bootstrap.min.css}는 Spring Boot의 
      ResourceUrlProvider에 의해 해석되어 실제 경로로 변환됩니다.
      이를 통해 빌드된 애플리케이션에서도 정적 리소스에 접근할 수 있습니다.

 2. Thymeleaf의 템플릿 문법

	- href="/bootstrap.min.css"는 일반적인 HTML 문법을 사용하고 있습니다.
      경로를 하드코딩하거나 정적 리소스의 상대 경로를 사용하는데 제한이 있습니다.
	
	- th:href="@{/bootstrap.min.css}"는 Thymeleaf의 템플릿 문법을 사용하고 있습니다. 
      th:href는 Thymeleaf의 템플릿 속성으로, ${}와 같은 표현식을 사용할 수 있습니다. 
      이를 통해 동적으로 경로를 생성하거나 템플릿 변수를 사용할 수 있습니다.

>> 따라서, 둘 다 동일한 결과를 나타내지만 th:href="@{/bootstrap.min.css}" 형식을 사용하면 
   Thymeleaf의 템플릿 기능과 정적 리소스의 유연성을 활용할 수 있습니다.
   특히, 동적인 경로 생성이나 템플릿 변수를 사용해야 하는 경우에 유용합니다.

Spring Boot Validation

  • 데이터의 유효성 검사를 수행하는 기능을 제공하는 Spring Boot의 모듈

주요 특징과 사용법

1. 어노테이션 기반의 유효성 검사

 - Spring Boot Validation은 어노테이션을 사용하여 유효성 검사 규칙을 정의
 - 자주 사용되는 어노테이션으로는 @NotNull, @Size, @Email, @Pattern 등이 있습니다
 - 이러한 어노테이션을 필드 레벨 또는 메소드 매개변수 레벨에 적용하여 데이터의 유효성을 검사할 수 있습니다.
 
2. 검사 결과의 처리

 - 유효성 검사 결과는 BindingResult 객체를 통해 처리
 - BindingResult는 유효성 검사 결과를 수신하고 해당 결과를 확인하고 처리하는 데 사용
 - 예를 들어, 검증 실패 시 에러 메시지를 수집하거나 특정 동작을 수행할 수 있습니다.
 
3. 커스텀 검증 규칙

 - Spring Boot Validation은 어노테이션만으로 제한되지 않고 커스텀 검증 규칙을 정의할 수 있는 기능도 제공
 - Validator 인터페이스를 구현하거나 @Constraint 어노테이션을 사용하여 커스텀 검증 로직을 작성할 수 있습니다.
 
4. 컨트롤러에서의 사용

 - 주로 Spring MVC 기반의 컨트롤러에서 Spring Boot Validation을 사용
 - 컨트롤러 메소드의 매개변수에 검증을 수행할 객체를 받고 @Valid 어노테이션을 적용하여 
   유효성 검사를 활성화시킵니다. 
 - 유효성 검사에 실패하면 검증 결과를 확인할 수 있고, 
   검증 실패 시 예외를 처리하거나 에러 메시지를 반환할 수 있습니다.

자주 사용되는 어노테이션

- @NotNull: 필드가 null이 아니어야 함을 나타냅니다.
- @NotEmpty: 문자열, 컬렉션, 배열 등이 null이 아니고 비어있지 않아야 함을 나타냅니다.
- @NotBlank: 문자열이 null이 아니고 공백이 아니어야 함을 나타냅니다.
- @Size: 문자열, 컬렉션, 배열의 크기 또는 길이 제한을 정의합니다.
- @Min: 숫자 타입의 최소값을 정의합니다.
- @Max: 숫자 타입의 최대값을 정의합니다.
- @Email: 이메일 주소의 유효성을 검사합니다.
- @Pattern: 정규 표현식에 일치하는지 검사합니다.
- @Valid: 중첩된 객체나 컬렉션의 유효성 검사를 활성화합니다.
- @AssertTrue: 특정 조건이 true여야 함을 검사합니다.

0개의 댓글