Oi, estou começando java e spring, e estou desenvolvendo um pequeno projetinho pessoal apenas para praticar um pouco mais, entrentando estou com um problema e não encontrei a solução ainda. Em resumo eu tenho duas tabelas no meu banco "Places" e "Categories", com uma relação muitos para um (Uma categoria pode ter varios lugares, mas um lugar só pode ser de uma categoria). O problema ocorre quando tento cadastrar um place e surge um erro que acredito ser em relação a FK (pois todas as outras tabelas que não tem FK eu consegui cadastrar sem problemas).
Segue minhas entities:
@Entity(name = "categories") @Table(name = "categories") @EqualsAndHashCode (of = "id") @Getter @Setter @AllArgsConstructor @NoArgsConstructor public class Category {
@Id
@GeneratedValue (strategy = GenerationType.UUID)
private String id;
private String name;
public Category(RequestCategoriesDTO requestCategoriesDTO) {
this.name = requestCategoriesDTO.name();
}
}
@Entity(name = "places") @Table(name = "places") @EqualsAndHashCode(of = "id") @Getter @Setter @AllArgsConstructor @NoArgsConstructor public class Place {
@Id
@GeneratedValue(strategy = GenerationType.UUID)
private String id;
private String name;
private String address;
@ManyToOne
@JoinColumn(name = "categories_id", referencedColumnName = "id")
private Category categories_id;
private Integer value_in_cents;
public Place(RequestPlacesDTO requestPlacesDTO) {
this.name = requestPlacesDTO.name();
this.address = requestPlacesDTO.address();
this.categories_id = requestPlacesDTO.categories_id();
this.value_in_cents = requestPlacesDTO.value_in_cents();
}
}
Segue meu PlacesController:
@RestController @RequestMapping("/places") public class PlacesController {
@Autowired
private PlaceRepository repository;
@GetMapping
public ResponseEntity getAllPlaces() {
var allPlaces = repository.findAll();
return ResponseEntity.ok(allPlaces);
}
@PostMapping("/register")
public ResponseEntity registerPlaces(@RequestBody @Valid RequestPlacesDTO data){
Place newPlace = new Place(data);
repository.save(newPlace);
return ResponseEntity.ok().buil();
}
}
Segue JSON da requisição: { "name": "Loca Madre", "address": "Av. ", "categories_id": "b3e08a43-2220-479b-8b81-a950a145a9e7", "value_in_cents": 7000 }
E segue o erro que aparece no terminal:
2023-07-21T19:37:12.898-03:00 WARN 11904 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of br.com.spring.spring.domain.Category
(although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('b3e08a43-2220-479b-8b81-a950a145a9e7')]