我正在寻找一种方法来缩短我的控制器代码。
例如我当前的控制器看起来像:
@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)