UserServiceの作成


🔨RequestVoの作成
@Data
public class RequestUser {
    @NotNull(message = "Email cannot be null")
    @Size(min = 2, message = "Email not be less than two characters")
    @Email
    private String email;
    @NotNull(message = "Name cannot be null")
    @Size(min = 2, message = "Name not be less than two characters")
    private String name;
    @NotNull(message =  "Pwd cannot be null")
    @Size(min = 8, message = "Pwd not be less than two characters")
    private String pwd;
}
🔨Userdtoの作成
@Data
public class UserDto {
    private String email;
    private String name;
    private String pwd;
    private String userId;
    private LocalDateTime createAt;
    private String encryptedPwd;
}
🔨ユーザー・サービスの作成
public interface UserService {
    UserDto createUser(UserDto userDto);
}
@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService{
    private final UserRepository userRepository;

    @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.setEncryptedPwd("encryptedPwd");

        UserEntity save = userRepository.save(userEntity);
        return null;
    }
}
🔨UserEntityの作成
@Data
@Entity
@Table(name = "users")
public class UserEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, length = 50, unique = true)
    private String email;
    @Column(nullable = false, length = 50)
    private String name;
    @Column(nullable = false, unique = true)
    private String userId;
    @Column(nullable = false, length = 50)
    private String encryptedPwd;
}
public interface UserRepository extends CrudRepository<UserEntity, Long> {
}
ModelMapperの追加
<dependency>
    <groupId>org.modelmapper</groupId>
    <artifactId>modelmapper</artifactId>
    <version>2.3.8</version>
</dependency>
Dto>EntityまたはDto>Voに変換する場合はsetまたはコンストラクション関数で変更できますが、ライブラリで変更することで変更を簡略化できます.
🔨コントローラの変更
@RestController
@RequestMapping("/")
@RequiredArgsConstructor
public class UserController {

    private final Environment env;
    private final Greeting greeting;
    private final 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!";
    }
}
🔨変更yml
...
spring:
  application:
    name: user-service  #Eureka에 등록되는 서비스 이름
  h2:
    console:
      enabled: true
      settings:
        web-allow-others: true
      path: /h2-console
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:testdb
    username: sa
    password:
...
テスト

実際にデータを転送する場合、Create User!見返りとして

dbも正常にデータに入った.
でも!apiをResponseEntityに返します!
@RestController
@RequestMapping("/")
@RequiredArgsConstructor
public class UserController {
    ...

    @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 ResponseEntity.status(HttpStatus.CREATED).body(null);
    }
}
String送信Create User!および無条件200 Okを使用するよりも、生成時に201コードを送信する方が正しい方法である.だから、上記のように、コードを変更して、再テストします.

正常に動作していることがわかります.
rest apiのように変更
🔨ResponseUserの作成
@Data
public class ResponseUser {
    private String email;
    private String name;
    private String userId;
}
🔨サービスの変更
public interface UserService {
    ResponseUser createUser(UserDto userDto);
}
@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService{
    private final UserRepository userRepository;

    @Override
    public ResponseUser 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.setEncryptedPwd("encryptedPwd");

        UserEntity save = userRepository.save(userEntity);
        ResponseUser responseUser = mapper.map(save, ResponseUser.class);

        return responseUser;
    }
}
🔨コントローラの変更
@RestController
@RequestMapping("/")
@RequiredArgsConstructor
public class UserController {

    ...

    @PostMapping("/users")
    public ResponseEntity createUser(@RequestBody RequestUser user){
        ModelMapper mapper = new ModelMapper();
        mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
        UserDto userDto = mapper.map(user, UserDto.class);
        ResponseUser responseUser = userService.createUser(userDto);

        return ResponseEntity.status(HttpStatus.CREATED).body(responseUser);
    }
}
次のように変更して、登録会員を作成して戻すときに返されるデータを返します.

ステータスコード値は、データを返します.これで戻ることができます.