본문 바로가기
Framekwork/photogram

[스프링 부트 포토그램] 23강 인증 회원가입 - @ResponseBody 사용하기

by 아이엠제니 2024. 9. 9.


IDE: IntetlliJ Ultimate
Spring Boot: 3.3.0
JDK: 17


 

 

 

 

 

front에서 validation 체크를 해도, postman에서 테스트할 시에는 체크가 안 될 수도 있음.

그래서 back에서도 validation 체크가 될 수 있도록 막아야 함.

 

 

 

 

💾 AuthController.java

@Slf4j
@RequiredArgsConstructor
@Controller // 1. IoC 2. 파일을 리턴하는 controller
public class AuthController {
    // 회원가입버튼 -> /auth/signup -> /auth/signin
    @PostMapping("/auth/signup")
    public @ResponseBody String signup(@Valid SignupReqDto signupReqDto, BindingResult bindingResult) { // key=value (x-www-form-urlencoded)

        if (bindingResult.hasErrors()) {
            Map<String, String> errorMap = new HashMap<>();

            for (FieldError error : bindingResult.getFieldErrors()) {
                errorMap.put(error.getField(), error.getDefaultMessage());
                log.info("error.getDefaultMessage() = " + error.getDefaultMessage());
            }
            return "오류남";
        } else {
            User join = authService.join(signupReqDto);
            log.info("join: {}", join.toString());

            return "auth/signin";
        }
    }

}
  • `@ResponseBody`가 있으면, data를 응답함

 

👉 @ResponseBody

  • Spring Framework에서 사용하는 애노테이션
  • Controller method의 반환 값을 HTTP 응답의 본문으로 직렬화하여 클라이언트에게 전송하는 역할을 함
    • 직렬화: 메서드가 반환하는 객체를 JSON, XML 등으로 변환하여 HTTP 응답 본문에 포함시킴. Spring에서 기본적으로 Jackson 라이브러리를 사용하여 JSON으로 변환함
    • REST API 개발: `@ResponseBody`는 RESTful 웹 서비스를 만들 때 자주 사용됨. API에서 데이터를 요청하면, 이 애노테이션이 붙은 메서드가 데이터를 JSON 형태로 반환할 수 있게 함

 

 

 

💾 SignupReqDto.java

package org.example.photogram_re.web.dto.auth;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Data;
import org.example.photogram_re.domain.user.User;


@Data // Getter, Setter
public class SignupReqDto {
    @Size(min=2, max=20)
    @NotBlank
    private String username;
    @NotBlank
    private String password;
    @NotBlank
    private String email;
    @NotBlank
    private String name;
    private String role;

    public User toEntity() {
        return User.builder()
                .username(username)
                .password(password)
                .email(email)
                .name(name)
                .role(role)
                .build();
    }
}
  • 기존 `private String username`위에 `Max(20)`
    • `@Size(min=2, max=20)`으로 변경
    • `@NotBlank` 추가

 

 

회원가입 시


  • 정상적으로 회원가입 시, 페이지가 return 되지 않고, 문자열이 return 됨

 

 

  • `username`에 문자열을 초과하여 입력하면 '오류남' 텍스트가 보임

 

 

 

어떤 경우에는 텍스트로, 어떤 경우에는 페이지로 return 되는 것은 비효율적임.

이다음 강의에서 글로벌 예외 처리로 수정 예정.

 

 

 

 

이지업클래스 [메타코딩] 스프링부트 SNS프로젝트 - 포토그램 만들기 강의 실습

참고
OpenAi. (2024) ChatGPT (version 3.5)[Large Language model]. https://chat.openai.com

 

 

 

 

 

300x250