GET Anfrage resultiert in unendlicher Antwort

werdas34

Bekanntes Mitglied
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.
Code:
- User
    - Post_1
    - User
        - Post_1
        - User
             - Post_1
             - ...
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:
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
 

Ähnliche Java Themen

Neue Themen


Oben