[내일배움캠프 Spring 4기] 32일차 TIL - Validation | RestTemplate

서예진·2024년 1월 30일
0

오늘의 학습 키워드 📕

▸ 코드카타
▸ Validation
▸ RestTemplate


▼ 코드카타

2024년 1월 30일 - [프로그래머스] 16 : 옹알이(2) | 숫자 짝궁 | 체육복


▼ Validation

📍Bean Validation

어노테이션설명
@NotNullnull 불가
@NotEmptynull, “” 불가
@NotBlanknull, “”. “ “ 불가
@Size문자 길이 측정
@Max최대값
@Min최소값
@Positive양수
@Negative음수
@EmailE-mail 형식
@Pattern정규 표현식
  • 필드 위에 적용하고 싶은 어노테이션을 넣는다.
[예시]
	@NotBlank
    private String name;
  • Validation을 적용하려면 build.gradle에 다음 코드를 넣는다.
implementation 'org.springframework.boot:spring-boot-starter-validation'

📍 Validation 예외 처리

  • Validation에 대해서 예외처리가 필요하다.
  • BindingResult : 예외가 발생하면 BindingResult 객체에 오류에 대한 정보가 담김
[예시]
@PostMapping("/user/signup")
public String signup(@Valid SignupRequestDto requestDto, BindingResult bindingResult) {
    // Validation 예외처리
    List<FieldError> fieldErrors = bindingResult.getFieldErrors();📌
    if(fieldErrors.size() > 0) {
        for (FieldError fieldError : bindingResult.getFieldErrors()) {
            log.error(fieldError.getField() + " 필드 : " + fieldError.getDefaultMessage());
        }
        return "redirect:/api/user/signup";
    }

    userService.signup(requestDto);

    return "redirect:/api/user/login-page";
}

📌 bindingResult.getFieldErrors() : 발생한 오류들에 대한 정보가 List fieldErrors 에 담긴다.


▼ RestTemplate

📍 RestTemplate 이란?

  • Open API를 사용하는 경우 내 서버가 Client 입장이 되어서 다른 서버로 요청을 보내야 한다.
  • RestTemplate: 스프링 프레임워크에서 제공하는 HTTP 통신을 간편하게 처리하기 위한 클래스
    • 주로 RESTful 웹 서비스와의 통신을 위해 사용
    • 이 클래스를 사용하면 HTTP 요청을 만들고 응답을 처리하는 데 필요한 기능을 쉽게 구현할 수 있음

📍 HTTP 메서드 호출

  • getForObject(): GET 요청을 보내고 결과를 객체로 받음.
  • getForEntity(): GET 요청을 보내고 결과를 ResponseEntity로 받음.
  • postForObject(): POST 요청을 보내고 결과를 객체로 받음.
  • postForEntity(): POST 요청을 보내고 결과를 ResponseEntity로 받음.

📍 요청 Header에 정보 추가

  • RestTemplate으로 요청을 보낼 때 Header에 특정 정보를 같이 전달하고 싶다면 RestTemplate의 exchange를 사용한다.
  • Client 입장 서버
public List<ItemDto> exchangeCall(String token) {
    // 요청 URL 만들기
    URI uri = UriComponentsBuilder
            .fromUriString("http://localhost:7070")
            .path("/api/server/exchange-call")
            .encode()
            .build()
            .toUri();
    log.info("uri = " + uri);

    User user = new User("Yeye", "0123");

    RequestEntity<User> requestEntity = RequestEntity
            .post(uri)
            .header("X-Authorization", token)
            .body(user);

    ResponseEntity<String> responseEntity = restTemplate.exchange(requestEntity, String.class);

    return fromJSONtoItems(responseEntity.getBody());
}
  • Server 입장 서버
public ItemResponseDto exchangeCall(String token, UserRequestDto requestDto) {
    System.out.println("token = " + token);
    System.out.println("requestDto.getUsername() = " + requestDto.getUsername());
    System.out.println("requestDto.getPassword() = " + requestDto.getPassword());

    return getCallList();
}
profile
안녕하세요

0개의 댓글