Spring i rest api

Spring i rest api
C9
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 4 lata
  • Postów:31
0

Witam,
Mam problem z api, gdyż wysyłając zwykłego posta używając Postmana dostaje komunikat o niepowodzeniu. ("could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement"). Po stronie serwera dodatkowo widnieje komunikat, że "pole xyz nie może być null". Zawsze robiłem w taki sam sposób (tworzę interfejs z adnotacją repository, następnie tworzę serwis, a na samym końcu wywołuję metodę z serwisu w kontrolerze). Nie wiem na czym polega mój problem, ale w momencie gdy chcę wyświetlić wysłane dane w konsoli okazuje się, że cały RequestBody jest pusty. Ktoś wie o co może chodzić?

Ps. Jeżeli to ma jakieś znaczenie to korzystam z wbudowanej bazy H2

DamianSn
  • Rejestracja:około 6 lat
  • Ostatnio:prawie 5 lat
  • Postów:52
0

Przecież masz piękny log, że nie może być nullem. Masz gdzieś błąd w logice, albo coś namieszane w kontrolerze. Spróbuj użyć debuggera to będziesz wiedział gdzie :)

edytowany 1x, ostatnio: DamianSn
K5
  • Rejestracja:około 6 lat
  • Ostatnio:około 17 godzin
  • Postów:1002
0

No ale pokaż kod :)

Informacje, które nam przekazałeś wskazują, że chcesz stworzyć/zmodyfikować obiekt a wartości, które przesyłasz są puste, a nie mogą.

C9
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 4 lata
  • Postów:31
0

Tutaj jest oczywiście kod. Może coś jest pomieszane z relacjami, bo w przypadku prostych POSTÓW wszystko działa poprawnie

Kopiuj
@Entity
public class SportpersontableEvent implements Serializable {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="sportpersonEventId")
    private Long sportpersontableeventId;
    
    @ManyToOne(fetch = FetchType.LAZY, targetEntity = Sportpersontable.class)
    @MapsId("sportpersonId")
    @JoinColumn(name="sportperson_id", nullable=false) 
    private Sportpersontable sportperson;
  
    @ManyToOne(fetch = FetchType.LAZY, targetEntity = Dyscyplinetable.class)
    @MapsId("dyscyplineId")
    @JoinColumn(name="dyscypline_id", nullable=false)
    private Dyscyplinetable dyscypline;
//getery i setery
Kopiuj
@Repository
public interface SportpersonEventRepo extends CrudRepository<SportpersontableEvent, Long> {
 }
Kopiuj
@RestController
@RequestMapping("api/sportpersonEvent")
@CrossOrigin
public class SportpersonEventApi {

    @Autowired
    private SportpersonEventManager sportpersonEventManager;

    @PostMapping
    public void add(@RequestBody SportpersontableEvent sportpersontableEvent) {
        sportpersonEventManager.add(sportpersontableEvent);
    }
Kopiuj
@Entity
public class Dyscyplinetable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="dyscyplineId")
    private Long dyscyplineId;
    
    private String name;
    
    private int population;
//getery i setery
}
Kopiuj
Entity
public class Sportpersontable implements Serializable{
      
    @Id
    @Column(name="sportpersonId")
    private Long sportpersonId;
    
    @OneToOne
    @MapsId
    private Usertable user;
//getery i setery
}
Charles_Ray
  • Rejestracja:około 17 lat
  • Ostatnio:dzień
  • Postów:1875
0

Pewnie próbujesz zapisać wiersz w tabeli z FK wskazujący na nieistniejący klucz w innej tabeli. Na pewno odpowiednie Sportpersontable i Dyscyplinetable istnieją już w bazie? Masz świadomość, co się dzieje pod spodem tj. na poziomie SQL-a?


”Engineering is easy. People are hard.” Bill Coughran
edytowany 1x, ostatnio: Charles_Ray
DamianSn
  • Rejestracja:około 6 lat
  • Ostatnio:prawie 5 lat
  • Postów:52
0

Nie jestem pewny jaki był twój cel, ale dlaczego stosujesz mapowanie @ManyToOne do obiektu, który wcale nie posiada żadnego odniesienia do tego pierwszego ?Polecam używać camelcase w nazewnictwie.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.