java - 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 (?, ?, ?)
解决方案
你在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;
}
}
推荐阅读
- macos - Docker:OS X 上不存在导出路径
- java - 获取 http 响应代码和所有可用的正文
- javascript - 最后将所有空值放入数组中
- c - 在 dsPIC33 中从 C 调用的汇编函数中如何解释返回值?
- javascript - Express 没有得到其他查询 Mongodb 的函数的返回
- java - 如何在后台仅在功能文件中运行一次 java 类
- mongodb - 自动缩放 Mongodb 作为 Microsoft Azure 上的服务
- google-ads-api - 广告脚本:在没有任何修改的情况下创建关键字 CONCURRENT_MODIFICATION 时出错
- javascript - mongoose $aggregate $lookup 不返回数据
- docker - Docker - 使用多台机器和日志驱动程序 json 文件进行集中日志记录的最简单方法?