Der Spring-Boot-POST-API-Endpunkt gibt einen Nullwert für den Fremdschlüssel zurück

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Der Spring-Boot-POST-API-Endpunkt gibt einen Nullwert für den Fremdschlüssel zurück

by Guest » 20 Jan 2025, 16:07

Blog.java

Code: Select all

package com.project.BlogSpot.Entity;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name="articles")
public class Blog {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(insertable=false, updatable=false)
private int id;

@Column(name="title")
private String title;

@Column(name="content")
private String content;

@Column(name="comments")
private String comments;

@Column(name="likes")
private int likes;

@ManyToOne
@JoinColumn(name="user_id")
private Users user;

public Blog(int id, String title, String content, String comments, int likes, Users user_id) {
super();
this.id = id;
this.title = title;
this.content = content;
this.comments = comments;
this.likes = likes;
this.user = user_id;
}

public Blog() {}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}

public String getComments() {
return comments;
}

public void setComments(String comments) {
this.comments = comments;
}

public int getLikes() {
return likes;
}

public void setLikes(int likes) {
this.likes = likes;
}

public Users getUser_id() {
return user;
}
public void setUser_id(Users user_id) {
this.user = user_id;
}
}
Users.java

Code: Select all

package com.project.BlogSpot.Entity;

import java.util.List;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;

@Entity
@Table(name="bloggers")
public class Users {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

@Column(name = "user_name", nullable = false, length = 20)
private String userName;

@Column(name = "user_pwd", nullable = false, length = 15)
private String userPwd;

@Column(name = "connected_users", columnDefinition = "JSON")
private String connectedUsers; // Stored as JSON in the database

// Helper method to convert connectedUsers JSON to List
public List getConnectedUsersList() {
ObjectMapper mapper = new ObjectMapper();
try {
return mapper.readValue(this.connectedUsers, new TypeReference() {});
} catch (Exception e) {
throw new RuntimeException("Error parsing JSON", e);
}
}
public void setConnectedUsersList(List  users) {
ObjectMapper mapper = new ObjectMapper();
try {
this.connectedUsers = mapper.writeValueAsString(users);
} catch (Exception e) {
throw new RuntimeException("Error converting List to JSON", e);
}
}

public Users(int id, String userName, String userPwd, String connectedUsers) {
super();
this.id = id;
this.userName = userName;
this.userPwd = userPwd;
this.connectedUsers = connectedUsers;
}

public Users() {}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public String getUserPwd() {
return userPwd;
}

public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}

public String getConnectedUsers() {
return connectedUsers;
}

public void setConnectedUsers(String connectedUsers) {
this.connectedUsers = connectedUsers;
}
}
BlogService.java

Code: Select all

    @Autowired
public BlogRepository blogRepository;

public void addBlog(Blog blog) {
if (blog.getUser_id() != null && blog.getUser_id().getId() != 0) {
// Fetch the User object from the database using the user ID
Users user = userRepository.findById(blog.getUser_id().getId())
.orElseThrow(() -> new RuntimeException("User not found"));

// Set the user in the blog object
blog.setUser_id(user);
} else {
throw new RuntimeException("User ID is missing or invalid");
}
blogRepository.save(blog);
}
BlogController.java

Code: Select all

    @Autowired
public BlogService service;

@PostMapping("/add")
public void addBlog(Blog blog) {
service.addBlog(blog);
}
Beim Versuch, eine Blog-Entität mit einem Verweis auf einen Benutzer in meiner Spring Boot-Anwendung hinzuzufügen, tritt ein 500 Internal Server Error auf. Die zurückgegebene Fehlermeldung lautet:
„message“: „Benutzer-ID fehlt oder ist ungültig“,
„Pfad“: „/blogs/add“
wird abgerufen ausgelöst.
Während des Debuggens gibt der Benutzer null zurück.
Bitte helfen Sie!

Top