首页 > 解决方案 > JPA 存储库保存方法在 MySQL 中插入 NULL 值,而不是 json 请求提供的值

问题描述

我是春天的新手。我想通过 Spring Boot 项目使用 POSTMAN 通过发布请求在 MySQL 数据库中添加一行。
我发送一个带有 json 正文的 post 请求,为表提供必要的值。但是当我检查表时,我看到表中插入了 NULL 值。你能帮我防止在表中插入空值吗?
CODE
AuthConroller.java 类

import com.hackernewsclient.com.hackernewsclient.dto.ResgisterRequest;
import com.hackernewsclient.com.hackernewsclient.service.AuthService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/auth")
public class AuthController {


    @Autowired
    private AuthService authService;

    @PostMapping("/signup")
    public ResponseEntity signup(@RequestBody ResgisterRequest resgisterRequest) {
        authService.signup(resgisterRequest);
        return new ResponseEntity(HttpStatus.OK);
    }

}

User.java 实体类
import javax.persistence.*;

@Entity
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column
    private String userName;
    @Column
    private String password;
    @Column
    private String email;

    public Long getId() {
        return id;
    }

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

    public String getUserName() {
        return userName;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

}

AuthService.java 类
import com.hackernewsclient.com.hackernewsclient.dto.ResgisterRequest;
import com.hackernewsclient.com.hackernewsclient.model.User;
import com.hackernewsclient.com.hackernewsclient.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class AuthService {

    @Autowired
    private UserRepository userRepository;

    public void signup(ResgisterRequest resgisterRequest) {
        User user = new User();
        user.setUserName(resgisterRequest.getUsername());
        user.setPassword(resgisterRequest.getPassword());
        user.setEmail(resgisterRequest.getEmail());
        userRepository.save(user);
    }
    
}

UserRepository.java 接口
import com.hackernewsclient.com.hackernewsclient.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User,Long> {
}

用于发布请求正文的 RegisterRequest.java 数据对象类
public class ResgisterRequest {

    private String user_name;
    private String password;
    private String email;

    public String getUsername() {
        return user_name;
    }

    public void setUsername(String username) {
        username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        email = email;
    }
}

POSTMAN 的屏幕截图 - 我的请求尝试,其状态为成功

MySQL phpmyadmin

Intellij 日志 中用户表值的屏幕截图
Hibernate: insert into user (email, password, user_name) values (?, ?, ?)

标签: javamysqlspring

解决方案


你在ResgisterRequest二传手有问题。username = username;为同一个变量赋值。它应该是this.user_name = user_name;

class ResgisterRequest {

    private String user_name;
    private String password;
    private String email;

    public String getUser_name() {
        return user_name;
    }

    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

推荐阅读