ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-12-11 00:03:12  阅读:251  来源: 互联网

标签:spring-boot crud java


我尝试通过邮递员使用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

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

这是在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方法不适用,因为我在DTO中将user.getRole()定义为int,但在User实体中将newUser.setRole()定义为Role.但是,如果我将User实体中的setRole更改为int,那我该如何告诉用户和角色之间的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;
}

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

解决方法:

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

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

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

标签:spring-boot,crud,java
来源: https://codeday.me/bug/20191210/2105074.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有