@Controller 와 @RestController 차이점
//@Controller
@RestController
@RequiredArgsConstructor
@RequestMapping("/api")
public class UserController {
private final UserService service;
@Controller : 주로 View, 화면을 반환하기 위한 어노테이션
데이터를 변환해야하는 경우 @ResponseBody 같이 사용
@GetMapping("/user/login-page")
public String loginPage() {
return "login";
}
Controller는 받은 요청을 처리하고 ViewName반환, DispatcherServlet은 ViewResolver를 통해 ViewName찾아 View반환
return "login"; → login.html을 보여줌
@RestController : 주로 JSON형태의 객체 데에터 반환, Restful Web Server에서 사용되는 어노테이션
@Controller + @ResponseBody 조합한 형태
*ResponseBody :보내려는 자바객체를 데이터(json)로 바꿔 Body에 넣어주는 어노테이션
*RequestBody : Body안의 데이터(json)를 자바객체로 변환해주는 어노테이션
@PostMapping("/user/signup")
public String signup(SignupRequestDto requestdto) {
포스트맨으로 localhost:8080/api/user/signup 회원가입 요청시 오류를 만남
2024-01-31T14:10:29.226+09:00 WARN 17644 --- [nio-8080-exec-2] o.a.c.util.SessionIdGeneratorBase : Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [113] milliseconds.
2024-01-31T14:11:11.296+09:00 ERROR 17644 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.IllegalArgumentException: rawPassword cannot be null] with root cause
java.lang.IllegalArgumentException: rawPassword cannot be null
@PostMapping("/user/signup")
public String signup(@RequestBody SignupRequestDto requestdto) {
@RequestBody 사용, 회원가입 성공
Spring Security를 이용한 API별 권한 제어
@Secured에너테이션 설정, @Secured("권한이름")
WebSecurityConfig에 @EnableGlobalMethodSecurity(securedEnabled = true) → @Secured 활성화
@Secured(UserEnum.Authority.ADMIN) // 관리자용
@GetMapping("/products/secured")
public String getProductsByAdmin(@AuthenticationPrincipal UserDetailsImpl userDetails) {
@EnableGlobalMethodSecurity(securedEnabled = true) //secured 활성화
public class WebSecurityConfig {
//접근 불가 페이지
http.exceptionHandling((exceptionHandling)->
exceptionHandling
.accessDeniedPage("/forbidden.html")
);
Validation @Valid
@PostMapping("/user/signup")
public String signup(@RequestBody @Valid SignupRequestDto requestdto) {
public class SignupRequestDto {
@NotBlank
private String username;
@NotBlank
private String password;
@Email
private String email;
@NotNull : null 허용하지 않음, "" / " " 허용O
@NotEmpty : null과 "" 둘 다 허용하지 않음 / " " 허용O
@NotBlank : 모두 허용 X
외에도 많은 어노테이션 참고*
'개발 일지 > Day by day' 카테고리의 다른 글
2024-02-22 TIL (0) | 2024.02.22 |
---|---|
2024-02-06 TIL (0) | 2024.02.06 |
2024-01-26 TIL (1) | 2024.01.26 |
2024-01-23 TIL (1) | 2024.01.24 |
2024-01-18 TIL (0) | 2024.01.18 |