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