- HTTP POST 요청을 처리하는 메소드를 정의할 때 사용됩니다.
- POST 요청은 클라이언트가 서버에 데이터를 전송할 때 사용되는 메소드입니다.
일반적으로 데이터를 서버로 전송하고 처리하는데 사용됩니다.
- @PostMapping 애너테이션은 요청된 URL 경로와 일치하는 메소드를 실행하고,
요청 바디의 데이터를 메소드의 매개변수에 바인딩합니다.
- 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의 템플릿 기능과 정적 리소스의 유연성을 활용할 수 있습니다.
특히, 동적인 경로 생성이나 템플릿 변수를 사용해야 하는 경우에 유용합니다.
주요 특징과 사용법
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여야 함을 검사합니다.