java-Spring Hibernate没有获取参数的值

前端之家收集整理的这篇文章主要介绍了java-Spring Hibernate没有获取参数的值 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我尝试通过邮递员使用post方法对我的spring boot应用程序进行API调用.
这是输入:

  1. {
  2. "username": "name","password": "1234","age": 12,"salary": 5000,"role": 1
  3. }

这是控制器中的代码

  1. @RequestMapping(value = "/signup",method = RequestMethod.POST,consumes = MediaType.APPLICATION_JSON_VALUE)
  2. public ResponseEntity<?> saveUser(@RequestBody UserDto user) {
  3. try {
  4. System.out.println(user.getUsername()); // => name
  5. System.out.println(user.getPassword()); // => 1234
  6. System.out.println(user.getSalary()); // => 5000
  7. System.out.println(user.getRole()); // => 1
  8. System.out.println(user.getAge()); // => 12
  9. userService.save(user);
  10. return ResponseEntity.ok().body("insert done");
  11. } catch (Exception e) {
  12. return ResponseEntity.badRequest().body(e.getMessage());
  13. }
  14. }

这是我的User.java

  1. @Id
  2. @GeneratedValue(strategy = GenerationType.IDENTITY)
  3. private Long id;
  4. @Column
  5. private String username;
  6. @Column
  7. @JsonIgnore
  8. private String password;
  9. @Column
  10. private long salary;
  11. @Column
  12. private int age;
  13. @ManyToOne(fetch = FetchType.LAZY,optional = false)
  14. @JoinColumn(name = "role_id")
  15. private Role role;
  16. // getters and setters

这是我的Role.java

  1. @Id
  2. @Column(name = "id")
  3. @GeneratedValue(strategy = GenerationType.IDENTITY)
  4. private Long id;
  5. @Column(name = "role_name",nullable = false)
  6. private String roleName;
  7. // getters and setters

这是我的UserDto.java

  1. private String username;
  2. private String password;
  3. private int age;
  4. private long salary;
  5. private int role;
  6. // getters and setters

这是我的RoleDto.java

  1. private Long id;
  2. private String roleName;
  3. // getters and setters

问题:它引发错误“列’role_id’不能为空”

这是在userServiceImpl中:
第(BeanUtils)行下方是here.

  1. @Override
  2. public User save(UserDto user) throws Exception {
  3. User newUser = new User();
  4. BeanUtils.copyProperties(user,newUser,"password");
  5. newUser.setPassword(bcryptEncoder.encode(user.getPassword()));
  6. try {
  7. userDao.save(newUser);
  8. } catch (Exception e) {
  9. throw new Exception(e);
  10. // this throw "Column role_id cannot be null"
  11. }
  12. return newUser;
  13. }

但是,如果我使用以下代码,则setRole方法不适用,因为我在DTO中将user.getRole()定义为int,但在User实体中将newUser.setRole()定义为Role.但是,如果我将User实体中的setRole更改为int,那我该如何告诉用户和角色之间的ManyToOne关系呢?

  1. @Override
  2. public User save(UserDto user) throws Exception {
  3. User newUser = new User();
  4. newUser.setUsername(user.getUsername());
  5. newUser.setPassword(bcryptEncoder.encode(user.getPassword()));
  6. newUser.setAge(user.getAge());
  7. newUser.setSalary(user.getSalary());
  8. newUser.setRole(user.getRole()); // here is the problem
  9. try {
  10. userDao.save(newUser);
  11. } catch (Exception e) {
  12. throw new Exception(e);
  13. }
  14. return newUser;
  15. }

注意:我想我只想使角色的输入参数只是上面提供的整数.

最佳答案
由于您在请求中获得的角色为1,因此您应该执行以下操作:

  1. Role role = new Role();
  2. role.setId(user.getRole());
  3. role.setRoleName("some name");
  4. newUser.setRole(role);

代码的第一部分中,问题可能出在这里BeanUtils.copyProperties(user,“ password”);,如果您尝试在该行之后调试或打印newUser,您将看到BeanUtils无法正确填充所有您的newUser对象的字段.这是因为在目标(newUser)中,字段角色的类型为Role,而在源(用户)中,该字段的类型仅为int.

猜你在找的Java相关文章