Pessoal, boa noite!
Seguindo os passos do curso eu to tentando fazer uma API usando um exemplo do mundo real, pois bem, métodos GET tando para listar tudo e por ID funcionam sem problemas, mas o método POST da esse erro aqui:
"timestamp": "2021-10-05T00:33:37.431+00:00",
"status": 400,
"error": "Bad Request",
"trace": "org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors\nField error in object 'cargo' on field 'id': rejected value [null]; codes [typeMismatch.cargo.id,typeMismatch.id,typeMismatch.long,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [cargo.id,id]; arguments []; default message [id]]; default message [Failed to convert value of type 'null' to required type 'long'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [null] to type [long] for value 'null'; nested exception is java.lang.IllegalArgumentException: A null value cannot be assigned to a primitive type]\n\tat
O código desse controller e esse aqui:
package br.com.alura.forum2.controller
import br.com.alura.forum2.model.Cargo
import br.com.alura.forum2.service.CargoService
import org.springframework.web.bind.annotation.*
@RestController
@RequestMapping("/cargos")
class CargoController(private val service : CargoService) {
@GetMapping
fun listAll() : List<Cargo>{
return service.listAll()
}
@GetMapping("/{id}")
fun listById(@PathVariable id : Long) : Cargo{
return service.listById(id)
}
@PostMapping
fun cadastrar(cargo : Cargo){
service.cadastrar(cargo)
}
}
Service:
package br.com.alura.forum2.service
import br.com.alura.forum2.model.Cargo
import org.springframework.stereotype.Service
import java.util.*
@Service
class CargoService(var cargos : List<Cargo>) {
init{
val cargo1 = Cargo(
id = 1,
cargo = "cargo 1"
)
val cargo2 = Cargo(
id = 2,
cargo = "cargo2"
)
cargos = Arrays.asList(cargo1, cargo2)
}
fun listAll() : List<Cargo>{
return cargos
}
fun listById(id : Long) : Cargo{
return cargos.stream().filter({ c -> c.id == id}).findFirst().get()
}
fun cadastrar (cargo : Cargo){
cargos.plus(cargo)
}
}
O JSON que estou passando no Postman e esse aqui:
{
"id" : 3,
"cargo" : "cargo3"
}
Ainda não implementei DTOs e nem os repositories pq quero fazer isso funcionar sem banco.