【发布时间】:2019-09-07 22:45:28
【问题描述】:
我尝试通过邮递员使用post 方法对我的Spring Boot 应用程序进行API 调用。
这是输入:
{
"username": "name",
"password": "1234",
"age": 12,
"salary": 5000,
"role": 1
}
这是控制器中的代码:
@RequestMapping(value = "/signup", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> saveUser(@RequestBody UserDto user) {
try {
System.out.println(user.getUsername()); // => name
System.out.println(user.getPassword()); // => 1234
System.out.println(user.getSalary()); // => 5000
System.out.println(user.getRole()); // => 1
System.out.println(user.getAge()); // => 12
userService.save(user);
return ResponseEntity.ok().body("insert done");
} catch (Exception e) {
return ResponseEntity.badRequest().body(e.getMessage());
}
}
这是我的 User.java
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String username;
@Column
@JsonIgnore
private String password;
@Column
private long salary;
@Column
private int age;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "role_id")
private Role role;
// getters and setters
这是我的 Role.java
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "role_name", nullable = false)
private String roleName;
// getters and setters
这是我的 UserDto.java
private String username;
private String password;
private int age;
private long salary;
private int role;
// getters and setters
这是我的 RoleDto.java
private Long id;
private String roleName;
// getters and setters
问题:抛出错误'Column 'role_id' cannot be null'
这是在 userServiceImpl 中:
下面的行 (BeanUtils) 是指here。
@Override
public User save(UserDto user) throws Exception {
User newUser = new User();
BeanUtils.copyProperties(user, newUser, "password");
newUser.setPassword(bcryptEncoder.encode(user.getPassword()));
try {
userDao.save(newUser);
} catch (Exception e) {
throw new Exception(e);
// this throw "Column role_id cannot be null"
}
return newUser;
}
但是,如果我使用下面的代码,setRole 方法是 not applicable,因为我在 DTO 中将 user.getRole() 定义为 int,但在 User 实体中将 newUser.setRole() 定义为 Role。但是,如果我将User 实体中的setRole 更改为int,那么,我如何告诉spring User 和Role 之间的ManyToOne 关系?
@Override
public User save(UserDto user) throws Exception {
User newUser = new User();
newUser.setUsername(user.getUsername());
newUser.setPassword(bcryptEncoder.encode(user.getPassword()));
newUser.setAge(user.getAge());
newUser.setSalary(user.getSalary());
newUser.setRole(user.getRole()); // here is the problem
try {
userDao.save(newUser);
} catch (Exception e) {
throw new Exception(e);
}
return newUser;
}
注意:我想我只想将role 的输入参数设置为上面提供的integer。
【问题讨论】:
标签: java spring-boot crud