[MSA] 회원가입(3) - End-Point 리턴값 설정

yejin·2024년 11월 7일

MSA

목록 보기
12/36

회원가입 (사용자 추가)

JPA 설정

📌 End-point 추가

  • UserController.java 수정
package com.example.euserservice.controller;

import com.example.euserservice.dto.UserDto;
import com.example.euserservice.service.UserService;
import com.example.euserservice.vo.Greeting;
import com.example.euserservice.vo.RequestUser;
import org.modelmapper.ModelMapper;
import org.modelmapper.convention.MatchingStrategies;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/")
public class UserController {

    private Environment env;
    private UserService userService; //추가

    @Autowired
    public UserController(Environment env, UserService userService) {
        this.env = env;
        this.userService = userService;
    }

    @PostMapping("/users")
    public String createUser(@RequestBody RequestUser user){
        ModelMapper mapper = new ModelMapper();
        mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);

        UserDto userDto = mapper.map(user, UserDto.class);
        userService.createUser(userDto);

        return "Create user method is called";
    }

}

✅ 상세 설명

  • RequestUser 타입은 RequestBody 형태로 전달되기 때문에 어노테이션 작성 필요

📌 실행결과

💡 실행 시, 'POST' 형식으로 요청해야 함.


📌 실행결과 리턴값 변경

➡ 기존에 일반 텍스트 형식으로 특정 문구를 return 했던 것을 코드로 변환
➡ 코드로 변환 시, 정확한 실행 결과를 return 받을 수 있음

  • UserController.java 수정
    @PostMapping("/users")
    public ResponseEntity createUser(@RequestBody RequestUser user){
        ModelMapper mapper = new ModelMapper();
        mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);

        UserDto userDto = mapper.map(user, UserDto.class);
        userService.createUser(userDto);

        return new ResponseEntity(HttpStatus.CREATED); 
    }

✅ 상세 설명
new ResponseEntity(HttpStatus.CREATED)

  • ResponseEntity는 HttpEntity의 확장 클래스로써 HttpStatus 상태 코드를 추가한 전체 HTTP 응답(상태 코드, 헤더 및 본문)을 표현하는 클래스
  • 기존의 200 OK 와 함께 작성했던 문구 대신에, 201(=CREATED 성공 코드 값)으로 반환값 변경
    (🔗 출처: ResponseEntity 알아보기)

📌 실행결과


📌 리턴값에 사용자에게 정보 전달 추가

  • ResoponseUser.java 생성
package com.example.euserservice.vo;

import lombok.Data;

@Data
public class ResponseUser{
    private String email;
    private String name;
    private String userId;
}
  • UserServiceImpl.java 리턴값 수정
@Override
    public UserDto createUser(UserDto userDto) {
        userDto.setUserId(UUID.randomUUID().toString());
        
        ModelMapper mapper = new ModelMapper();
        mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT); 
        UserEntity userEntity = mapper.map(userDto, UserEntity.class); 
        userEntity.setEncryptPwd("encrypted_password"); //구현 전이므로 default값 저장
        
        userRepository.save(userEntity);

        UserDto returnUserDto = mapper.map(userEntity, UserDto.class);

        return returnUserDto;
    }

✅ 상세 설명
mapper.map(userEntity, UserDto.class) 를 사용하여 userEntity 클래스를 UserDto 클래스 형태로 변환하여 해당 값을 return하여 Controller에 전달함.

  • UserController.java 수정
    @PostMapping("/users")
    public ResponseEntity<ResponseUser> createUser(@RequestBody RequestUser user){
        ModelMapper mapper = new ModelMapper();
        mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);

        UserDto userDto = mapper.map(user, UserDto.class);
        userService.createUser(userDto);

        ResponseUser responseUser = mapper.map(userDto, ResponseUser.class);

        return ResponseEntity.status(HttpStatus.CREATED).body(responseUser);
    }

✅ 상세 설명

  • UserServiceImpl.javacreateUser()의 return 값이 UserDto에 저장되어 있음
  • 해당 값을 mapper.map(userDto, ResponseUser.class) 를 통해 ResponseUser 클래스 형태로 변환
  • 보여줄 정보를 body에 추가하여 return

📌 실행결과

profile
새싹 개발자

0개의 댓글