๋ชฉ์ฐจ

SpringBoot ์ ํจ์ฑ ๊ฒ์ฆ ๐
ํด๋ผ์ด์ธํธ์์ ๋์ด์จ ๊ฐ๋ค์ ๋ํ ์ ํจ์ฑ ๊ฒ์ฆ์ด ํ์ํ๋ฐ if(id != null || id != ""...) ์ด๋ ๊ฒ if๋ฌธ์ผ๋ก ์ ํจ์ฑ ์ฒดํฌ๋ฅผ ํ๊ธฐ ์ซ์ด์ ์๋ฐ๋ ์คํ๋ง์์ ์ง์ํ๋ ์ข์๊ฒ ์ด๋ ์๋ ๋ณด๋ค๊ฐ ๊ตฌ๊ธ๋ง์ ํ๊ณ @Valid์ @Validated๋ฅผ ์๊ฒ๋์ด์ ์ ์ฉ์ ํด๋ดค๊ณ ์ด๋ฅผ ๊ธฐ๋กํ๋ค.
๋ "", " ", null ์ด๋ ๊ฒ 3๊ฐ๋ง ์ฒดํฌํ๋ฉด ๋๋ ๋ถ๋ถ์ด์๋ค.
๊ฒฐ๋ก ์ ์คํ๋ง๋ถํธ์์ @Valid์ @Validated 2๊ฐ๋ฅผ ์ฌ์ฉํด์ ๊ฐ๋จํ ์ ํจ์ฑ ์ฒดํฌ๋ฅผ ํ ์ ์์
@Valid ๐ฅฐ
@Valid๋ JSR-303 Bean Validator๋ฅผ ์ด์ฉํด์ ์ ํจ์ฑ์ ์ฒดํฌํ๋ ์ด๋ ธํ ์ด์ ์(์๋ฐ ํ์ค ์คํ)
์ฌ์ฉ๋ฒ
์คํ๋ง๋ถํธ ๋ฒ์ ์ ๋ฐ๋ฅธ ์์กด์ฑ ์ถ๊ฐ
์ฌ์ฉํ๋ ์คํ๋ง ๋ถํธ ๋ฒ์ ์ด 2.3์ด์ ๋ฒ์ ์ด๋ผ๋ฉด spring-boot-starter-web ์์กด์ฑ์ ํฌํจ๋์ด ์์ด์ ๊ตณ์ด ํ์์์, ๋๋ ํ์ฌ ์ ๋ฌด ์ 2.0๋ฒ์ ์ ์ฌ์ฉํ๊ณ ์์ด์ ์์กด์ฑ์ ๋ฐ๋ก ์ถ๊ฐํ์ง ์์๋ค.
Spring Boot - Validations stopped working after upgrade from 2.2.5 to 2.3.0
I've migrated a Spring Boot project from 2.2.5 to 2.3.0 and after that, Validations stopped to work (they aren't invoked at all). I read in changelog documentation (https://github.com/spring-proje...
stackoverflow.com
์ปจํธ๋กค๋ฌ์์ ์ ํจ์ฑ ์ฒดํฌ๋ฅผ ํ ๊ฒ์ด๊ธฐ์ parameter๊ฐ์ผ๋ก ๋ฐ๋ ๊ฐ์ฒด์ @Valid ์ด๋ ธํ ์ด์ ์ถ๊ฐ
@Valid๋ ์ปจํธ๋กค๋ฌ์์๋ง ๊ฒ์ฆ ๊ฐ๋ฅ(ArgumentResolver์์ ์ฒ๋ฆฌ), ๋ง์ผ ๋ค๋ฅธ ์๋น์ค๋จ ๊ฐ์ ๊ณณ์์ ์ฌ์ฉํ๋ ค๋ฉด @Validated ์ฌ์ฉ
Controller(RestController)
@PostMapping("")
public ResponseEntity<?> insertUser(@RequestBody @Valid MemberVO memberVO) throws Exception {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
userService.insertUser(memberVO);
resultMap.put("result", "success");
return new ResponseEntity<>(resultMap, HttpStatus.OK);
} catch (Exception e) {
resultMap.put("result", "fail");
return new ResponseEntity<>(resultMap, HttpStatus.BAD_REQUEST);
}
}
MemberVO
์ ํจ์ฑ ์ฒดํฌํ ํ๋์ @NotNull, NotEmppty ๋ฑ์ JSR ํ์ค ์คํ์์ ์ ๊ณตํ๋ ์ด๋ ธํ ์ด์ ์ ์ ์ฉํ๋ค.
package com.lsy.test;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Getter
@ToString
public class MemberVO {
// ๋ฒํธ
// default message ์ค์ ๊ฐ๋ฅ
@NotNull(message = "์ผ๋ จ๋ฒํธ๋ ํ์๊ฐ์
๋๋ค.") // null๋ง ๋ถ๊ฐ("", " " ๊ฐ๋ฅ)
private Long no;
// ์์ด๋
@NotBlank(message = "์์ด๋๋ ํ์๊ฐ์
๋๋ค.") // null, "", " " ๋ถ๊ฐ
private String id;
// ์ด๋ฆ
@NotBlank(message = "์ด๋ฆ์ ํ์๊ฐ์
๋๋ค.")
private String name;
}

ํ ์คํธ
ํ๋ฉด์์๋ JSON ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค. ์๋์ฒ๋ผ ์ผ๋ถ๋ฌ ์์ด๋๋ฅผ ๋น๊ฐ์ผ๋ก ์๋ฒ๋ก ๋ณด๋ด๋ณด๊ฒ ๋ค.
{
"no": 10,
"id": "",
"name": "bbbb"
}
์๋ฒ์์๋ ์๋์ฒ๋ผ Exception(MethodArgumentNotValidException)์ด ๋ฐ์ํ๋ค.
default message์๋ VO๊ฐ์ฒด์ ๋ด๊ฐ ์๊น ์ ๋ ฅํ ๊ธฐ๋ณธ ๋ฉ์์ง๊ฐ ํ์๋์๋ค.

@Validated ๐ฅฐ
@Validated๋ ์คํ๋ง์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด๋ค.
๋ง์ผ ์ปจํธ๋กค๋ฌ์์ ์ฌ์ฉ ์ ์๋์ฒ๋ผ ๊ฒ์ฆํ ๊ฐ์ฒด์์ @Validated๋ฅผ ๋ถ์ด๋ฉด ๋๋ค.
@PostMapping("")
public ResponseEntity<?> insertUser(@RequestBody @Validated MemberVO memberVO) throws Exception {
Map<String, Object> resultMap = new HashMap<String, Object>();
๋๋จธ์ง ์๋ต...
}
@Valid๋ ๊ฐ์ฒด ์ ์ฒด์ ๋ํด ์ ํจ์ฑ์ ๊ฒ์ฆํ๊ณ @Validated๋ ๊ทธ๋ฃน์ ๋ง๋ค์ด์ ์ํ๋ ์์๋ง ๊ฒ์ฆํ ์ ์๊ณ
์ปจํธ๋กค๋ฌ๊ฐ ์๋ ๊ณณ์์๋ ์ ํจ์ฑ ๊ฒ์ฆ์ ํ ์ ์๊ณ ์์ธ๋ ConstraintViolationException์ด ๋ฐ์ํ๋ค.
์ฐธ์กฐํ ๋ธ๋ก๊ทธ์ ๊ฐ๋ฉด ๋์์๋ฆฌ์ ๋ ์์ธํ ๋ด์ฉ์ด ๋์์๋ค.
์ฐธ์กฐ : ๋ง๋๋๊ฐ๋ฐ์๋ ๋ธ๋ก๊ทธ, 2021.7.19, https://mangkyu.tistory.com/174
[Spring] @Valid์ @Validated๋ฅผ ์ด์ฉํ ์ ํจ์ฑ ๊ฒ์ฆ์ ๋์ ์๋ฆฌ ๋ฐ ์ฌ์ฉ๋ฒ ์์ - (1/2)
Spring์ผ๋ก ๊ฐ๋ฐ์ ํ๋ค ๋ณด๋ฉด DTO ๋๋ ๊ฐ์ฒด๋ฅผ ๊ฒ์ฆํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด๋ฅผ ๋ณ๋์ ๊ฒ์ฆ ํด๋์ค๋ก ๋ง๋ค์ด ์ฌ์ฉํ ์ ์์ง๋ง ๊ฐ๋จํ ๊ฒ์ฆ์ ๊ฒฝ์ฐ์๋ JSR ํ์ค์ ์ด์ฉํด ๊ฐ๊ฒฐํ๊ฒ ์ฒ๋ฆฌํ ์
mangkyu.tistory.com

'IT > development' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [mybatis] mybatis ๋์ ์ฟผ๋ฆฌ ์์ฑ ์ "," ๊ด๋ จ (0) | 2022.11.22 |
|---|---|
| [Spring] spring REST API ๊ณต๋ถ(feat. @RestController) (0) | 2022.11.22 |
| [mybatis] mybatis parameter ์ฌ๋ฌ๊ฐ ์ ๋ฌ (0) | 2022.11.22 |
| [mybatis] ์์ธ ์กฐํ ์ ๋ณต์๊ฐ ์ถ๊ฐ ์กฐํ(feat. vo & map) (0) | 2022.11.22 |
| [JavaScript] Ajax ๊ฒฐ๊ณผ๊ฐ ๋ณ์ ์ ์ฅ (0) | 2022.11.22 |
๋๊ธ