UserServiceの作成
🔨RequestVoの作成
🔨コントローラの変更
実際にデータを転送する場合、Create User!見返りとして
dbも正常にデータに入った.
でも!apiをResponseEntityに返します!
正常に動作していることがわかります.
rest apiのように変更
🔨ResponseUserの作成
ステータスコード値は、データを返します.これで戻ることができます.
@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);
}
}
次のように変更して、登録会員を作成して戻すときに返されるデータを返します.ステータスコード値は、データを返します.これで戻ることができます.
Reference
この問題について(UserServiceの作成), 我々は、より多くの情報をここで見つけました https://velog.io/@ililil9482/UserService-만들기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol