Hallo,
ich beschäftige mich aktuell mit dem Spring Framework. Aktuell bastle ich an einer REST-API mit H2-Datenbank.
Aktuelle Situation.
Klasse User und Klasse Post (im Sinne von Kommentare). In der Datenbank ist ein User und zwei Posts.
Wenn ich eine Get Anfrage stelle dann bekomme ich einen unenndlichen JSON-Request. Sende ich einen Get mit einer falschen ID, bekomme ich richtigerweise 404.
Sieht ungefähr so aus.
Und als Fehlermeldung:
2023-06-08T00:40:15.984+02:00 ERROR 3020 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError)] with root cause
Hier mal ein Auszug der meiner Meinung nach relevantesten Klassen:
Was habe ich falsch gemacht? Ich verstehs einfach nicht. Sollte es nicht aus dem Codeschnipsel ersichtbar sein, reiche ich den Rest nach.
mfg werdas34
ich beschäftige mich aktuell mit dem Spring Framework. Aktuell bastle ich an einer REST-API mit H2-Datenbank.
Aktuelle Situation.
Klasse User und Klasse Post (im Sinne von Kommentare). In der Datenbank ist ein User und zwei Posts.
Wenn ich eine Get Anfrage stelle dann bekomme ich einen unenndlichen JSON-Request. Sende ich einen Get mit einer falschen ID, bekomme ich richtigerweise 404.
Sieht ungefähr so aus.
Code:
- User
- Post_1
- User
- Post_1
- User
- Post_1
- ...
2023-06-08T00:40:15.984+02:00 ERROR 3020 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError)] with root cause
Hier mal ein Auszug der meiner Meinung nach relevantesten Klassen:
Java:
@Entity
@Table(name = "Users")
public class User {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Column
private String name;
@Column
private int age;
@Column
private String gender;
@OneToMany(mappedBy = "user")
private List<Post> posts;
// Getter und Setter
}
@Entity
@Table(name = "Posts")
public class Post {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String text;
@ManyToOne
@JoinColumn(name = "userId", referencedColumnName = "id")
private User user;
// Getter und Setter
}
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserRepository userRepository;
@GetMapping
public ResponseEntity<List<User>> getAllUsers() {
List<User> users = (List<User>) userRepository.findAll();
return ResponseEntity.ok(users);
}
@GetMapping("/{id}")
public ResponseEntity<User> getUser(@PathVariable("id") long id) {
Optional<User> u = userRepository.findById(id);
if(u.isPresent()) {
return new ResponseEntity<>(u.get(), HttpStatus.OK);
}
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
}
Was habe ich falsch gemacht? Ich verstehs einfach nicht. Sollte es nicht aus dem Codeschnipsel ersichtbar sein, reiche ich den Rest nach.
mfg werdas34