Я ищу способ сократить код моего контроллера.
Например, мой текущий контроллер выглядит так:
@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);
}