본문 바로가기
개발 일지/Day by day

2024-01-31 TIL

by 쁘띠뀨띠 2024. 1. 31.

@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