首先,我很抱歉,我是使用此技术的新手,我真的有很多疑问。
我正在尝试将json对象发送到我的控制器类,问题是@RequestBody
的所有数据都到达了,而外键却到达了null
。例如,输入一个具有BD中已经存在的角色ID的新用户,用户数据已到达,但角色ID已到达null
首先,我通过POST注册角色的数据,并且一切都可以与@RequestBody
完美配合,但是当我尝试向role_id
注册用户时,也已经使用{{ 1}}随@RequestBody
id_rol
我的用户实体:
null
我的角色实体:
@Entity
public class Usuario implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String correo;
private String pass;
private boolean activo;
@OneToOne(optional = false, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name="rol_id", nullable = false)
private Rol rol;
public Usuario(){}
public Usuario(String correo, String pass, boolean activo, Rol rol) {
this.correo = correo;
this.pass = pass;
this.activo = activo;
this.rol = rol;
}
/*getter y setter*/
用户存储库:
@Entity
//@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Rol implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String nombre;
private boolean activo;
@OneToMany(mappedBy = "rol")
private List<Usuario> usuarios;
public Rol(){}
public Rol(String nombre, boolean activo, List<Usuario> usuarios) {
this.nombre = nombre;
this.activo = activo;
this.usuarios = usuarios;
}
/*getter y setter*/
角色存储库:
@Repository
public interface UsuarioRepository extends JpaRepository<Usuario, Serializable> {
public abstract Usuario findByCorreo(String correo);
}
用户控制器类:
public interface RolRepository extends JpaRepository<Rol, Serializable> {
}
角色控制器类:
@RestController
@RequestMapping("/v1")
public class UsuarioController {
@Autowired
UsuarioRepository usuarioRepository;
@PostMapping("/usuario/add")
public @ResponseBody ResponseEntity<String> crear(@Valid @RequestBody Usuario usuario) {
try{
usuarioRepository.save(usuario);
return new ResponseEntity<String>("Registro Exitoso..", HttpStatus.OK);
}catch (Exception e){
return new ResponseEntity<String>("Ha ocurrido un Error..", HttpStatus.BAD_REQUEST);
}
}
}
这是我发送给控制器的内容:
@RestController
@RequestMapping("/v1")
public class RolController {
@Autowired
RolRepository rolRepository;
@PostMapping("/rol/add")
public @ResponseBody ResponseEntity<String> crear(@Valid @RequestBody Rol rol) {
try{
rolRepository.save(rol);
return new ResponseEntity<String>("Registro Exitoso..", HttpStatus.OK);
}catch (Exception e){
return new ResponseEntity<String>("Ha ocurrido un Error..", HttpStatus.BAD_REQUEST);
}
}
}
这就是我收到的:
{
"correo": "pepito@gmail.com",
"pass": "1234",
"activo": "true",
"rol_id": "5"
}
我应该如何接收id_rol = 5的尸体?
我知道我在{
"correo": "pepito@gmail.com",
"pass": "1234",
"activo": true,
"rol_id": null
}
中做错了,我感谢您提供的任何示例,因为我已经搜索了但没有找到。谢谢..!
答案 0 :(得分:1)
这是因为您向REST控制器发送了错误的JSON结构。
在您的Usuario
类中,role_id
实际上是一个名称为rol
的对象字段,它代表Rol
类。
因此,您需要在请求中传递Rol
和id
作为JSON对象:
{
"correo": "pepito@gmail.com",
"pass": "1234",
"activo": "true",
"rol": {
"id":"5"
}
}