小编jar*_*435的帖子

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

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

例如我当前的控制器看起来像:

@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);
}
Run Code Online (Sandbox Code Playgroud)

当然,它可以缩短为:

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

但以可读性为代价。

所以我发现很少有教程采用漂亮而简洁的方法,例如:
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);
}
Run Code Online (Sandbox Code Playgroud)

java spring spring-boot mapstruct

5
推荐指数
0
解决办法
3035
查看次数

标签 统计

java ×1

mapstruct ×1

spring ×1

spring-boot ×1