使用MapStruct将DTO自动映射到Spring Boot API上的实体

时间:2018-10-05 07:09:02

标签: java spring spring-boot mapstruct

我正在寻找一种缩短控制器代码的方法。

例如,我当前的控制器如下:

@PostMapping
public ResponseEntity<UserDTO> create(@RequestBody @Valid UserDTO userDTO) {
    val user = userMapper.userDTOToUser(userDTO);
    val createdUser = userService.create(user);
    val responseDTO = userMapper.userToUserDTO(createdUser);
    return new ResponseEntity<>(responseDTO, HttpStatus.CREATED);
}

当然可以缩短为:

@PostMapping
public ResponseEntity<UserDTO> create(@RequestBody @Valid UserDTO userDTO) {
    val createdUser = userService.create(userMapper.userDTOToUser(userDTO));
    return new ResponseEntity<>(userMapper.userToUserDTO(createdUser), HttpStatus.CREATED);
}

但要牺牲可读性。

因此,我发现一些教程没有一个很好而简洁的方法,例如:
auth0.com/blog
breakpoint.digital

,但两者(以及我能找到的其他所有东西)都使用ModelMapper
有没有办法用MapStruct达到类似的结果?
扩展RequestResponseBodyMethodProcessor似乎是正确的方法,但是找不到有关此的任何信息。

基于以上教程,我最终希望得到以下结果:

@PostMapping
@OutputDTO(UserDTO.class)
public ResponseEntity<User> create(@RequestBody @Valid @InputDTO(UserDTO.class) User user) {
    return new ResponseEntity<>(userService.create(user), HttpStatus.CREATED);
}

0 个答案:

没有答案