如何使用@RequestBody或@RequestParam接收json对象

时间:2019-10-28 22:13:30

标签: java spring spring-boot

首先,我很抱歉,我是使用此技术的新手,我真的有很多疑问。 我正在尝试将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 } 中做错了,我感谢您提供的任何示例,因为我已经搜索了但没有找到。谢谢..!

1 个答案:

答案 0 :(得分:1)

这是因为您向REST控制器发送了错误的JSON结构。

在您的Usuario类中,role_id实际上是一个名称为rol的对象字段,它代表Rol类。 因此,您需要在请求中传递Rolid作为JSON对象:

{
  "correo": "pepito@gmail.com",
  "pass": "1234",
  "activo": "true",
  "rol": {
    "id":"5"
  }
}