Учим Котлин.
У меня есть DTO.
@JsonInclude(JsonInclude.Include.NON_EMPTY)
open class AbstractDto : Serializable {
open var id: Long? = null
open var created: LocalDateTime? = null
open var updated: LocalDateTime? = null
}
open class UserDto : AbstractDto() {
open var height: Int? = null
open var weight: Double? = null
open var gender: String? = null
open var birthDate: LocalDateTime? = null
open val contacts: List<ContactDto> = ArrayList()
}
У меня есть контроллер, который наследует абстрактный класс, который наследует интерфейс:
@RestController
@RequestMapping("/user")
@ControllerImpl
class UserController : AbstractController<User, UserDto, UserMapper, UserRepository, UserServiceImpl>()
open class AbstractController<
E : AbstractEntity,
D : AbstractDto,
M : AbstractMapper<E, D>,
R : CommonRepository<E>,
S : AbstractService<E, D, M, R>
> : CommonController<D> {
private val service: S? = null
override fun save(dto: D?): ResponseEntity<D> = ResponseEntity.ok(service!!.save(dto)!!)
override fun update(dto: D): ResponseEntity<D> = ResponseEntity.ok(service!!.update(dto)!!)
override fun get(id: Long): ResponseEntity<D> = ResponseEntity.ok(service!!.get(id)!!)
override fun getAll(pageable: Pageable): ResponseEntity<Page<D>> = ResponseEntity.ok(service!!.getAll(pageable))
override fun delete(id: Long): ResponseEntity<Boolean> = ResponseEntity.ok(service!!.delete(id))
}
interface CommonController<D : AbstractDto> {
@PostMapping
fun save(dto: D?): ResponseEntity<D>
@PutMapping
fun update(dto: D): ResponseEntity<D>
@GetMapping("/all")
fun get(id: Long): ResponseEntity<D>
@GetMapping
fun getAll(pageable: Pageable): ResponseEntity<Page<D>>
@DeleteMapping
fun delete(id: Long): ResponseEntity<Boolean>
}
Отправка POST-запроса:
{
"height": 180,
"weight": 75,
"user": 1
}
Мой контроллер напоминает DTO, в котором все поля пусты. Совет, что не так? Он работал в простом контроллере, прежде чем перейти к абстракции.