MapStruct - 找不到 IntelliJ 的实现
MapStruct - Cannot find implementation with IntelliJ
使用最新的Springboot MapStruct 1.3.1版本将Dtos转为对象。 (Java11,Gradle6.6 版本)
我收到以下异常:
org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name 'userController' defined in
file [/directory/UserController.class]: Unsatisfied dependency expressed
through constructor parameter 0; nested exception is
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'userServiceImpl' defined in
file [/directory/UserServiceImpl.class]: Bean instantiation via constructor failed;
nested exception is
org.springframework.beans.BeanInstantiationException:
Failed to instantiate [package.service.UserServiceImpl]:
Constructor threw exception;
nested exception is
java.lang.RuntimeException: java.lang.ClassNotFoundException:
Cannot find implementation for package.service.mapper.UserMapper
请你看看我哪里错了?
我的代码:
build.gradle
compile group: 'org.mapstruct', name: 'mapstruct', version: '1.3.1.Final'
UserController.java
@CrossOrigin(origins = "*", maxAge = 3306)
@RestController
@RequiredArgsConstructor
@RequestMapping("/user")
public class UserController {
private final UserServiceImpl userService;
@PostMapping
public ResponseEntity<UserDTO> login(UserDTO request) {
return ResponseEntity.ok(userService.login(request));
}
UserService.java
public interface UserService {
public UserDTO login(UserDTO user);
}
UserServiceImpl.java
@Service
@RequiredArgsConstructor
public class UserServiceImpl extends CheckException implements UserService {
private final UserRepository userRepository;
private UserMapper mapper = Mappers.getMapper(UserMapper.class);
@Override
public UserDTO login(UserDTO user) {
usernameParameterCheck(user.getId());
User currentUser = userRepository.findUserByIdAndPassword(user.getId(), user.getPassword());
userNullCheck(currentUser);
return mapper.entityToDto(currentUser);
}
}
UserMapper.java
@Mapper(componentModel = "spring")
public interface UserMapper {
User dtoToEntity(UserDTO userDTO);
UserDTO entityToDto(User user);
}
我解决了这个问题:在 DTO class 中添加 '@NoArgsConstructor' 注释:D
使用最新的Springboot MapStruct 1.3.1版本将Dtos转为对象。 (Java11,Gradle6.6 版本) 我收到以下异常:
org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name 'userController' defined in
file [/directory/UserController.class]: Unsatisfied dependency expressed
through constructor parameter 0; nested exception is
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'userServiceImpl' defined in
file [/directory/UserServiceImpl.class]: Bean instantiation via constructor failed;
nested exception is
org.springframework.beans.BeanInstantiationException:
Failed to instantiate [package.service.UserServiceImpl]:
Constructor threw exception;
nested exception is
java.lang.RuntimeException: java.lang.ClassNotFoundException:
Cannot find implementation for package.service.mapper.UserMapper
请你看看我哪里错了?
我的代码:
build.gradle
compile group: 'org.mapstruct', name: 'mapstruct', version: '1.3.1.Final'
UserController.java
@CrossOrigin(origins = "*", maxAge = 3306)
@RestController
@RequiredArgsConstructor
@RequestMapping("/user")
public class UserController {
private final UserServiceImpl userService;
@PostMapping
public ResponseEntity<UserDTO> login(UserDTO request) {
return ResponseEntity.ok(userService.login(request));
}
UserService.java
public interface UserService {
public UserDTO login(UserDTO user);
}
UserServiceImpl.java
@Service
@RequiredArgsConstructor
public class UserServiceImpl extends CheckException implements UserService {
private final UserRepository userRepository;
private UserMapper mapper = Mappers.getMapper(UserMapper.class);
@Override
public UserDTO login(UserDTO user) {
usernameParameterCheck(user.getId());
User currentUser = userRepository.findUserByIdAndPassword(user.getId(), user.getPassword());
userNullCheck(currentUser);
return mapper.entityToDto(currentUser);
}
}
UserMapper.java
@Mapper(componentModel = "spring")
public interface UserMapper {
User dtoToEntity(UserDTO userDTO);
UserDTO entityToDto(User user);
}
我解决了这个问题:在 DTO class 中添加 '@NoArgsConstructor' 注释:D