我在RESTful系统上使用Spring Boot。我有两个表“users”和“permissions”,它们与一个只有外键id_user和id_permission的中间表“user_permission”具有多对多关系。
我已经设法让它向我展示用户从GET到“users / {id} / permissions”的权限,但我仍然不知道如何使用POST添加关系或使用DELETE删除它。我尝试使用本机Querys,但我读到JPA中不存在INSERT。有关如何实施它的任何建议吗?
我想要做的是使用POST创建关系:user / {id} / permission / {id} 并使用具有相同网址的DELETE删除该关系。
这是我的用户控制器:
@RestController
@RequestMapping("/permisos-api")
public class UsuarioController {
@Autowired
UsuarioRepository userRepository;
@GetMapping("/usuarios")
public List<Usuario> getAllUsuarios() {
return userRepository.findAll();
}
@GetMapping("/usuarios/{id}")
public ResponseEntity<Usuario> getUsuarioById(@PathVariable(value = "id")
Integer userId) {
Usuario user = userRepository.findOne(userId);
if(user == null) {
return ResponseEntity.notFound().build();
}
return ResponseEntity.ok().body(user);
}
@PostMapping("/usuarios")
public Usuario createUsuario(@Valid @RequestBody Usuario user) {
return userRepository.save(user);
}
@PutMapping("/usuarios/{id}")
public ResponseEntity<Usuario> updateUsuario(@PathVariable(value = "id")
Integer userId, @Valid @RequestBody Usuario
userDetails) {
Usuario user = userRepository.findOne(userId);
if(user == null) {
return ResponseEntity.notFound().build();
}
user.setNombre(userDetails.getNombre());
user.setStatus(userDetails.getStatus());
Usuario updatedUser = userRepository.save(user);
return ResponseEntity.ok(updatedUser);
}
@DeleteMapping("/usuarios/{id}")
public ResponseEntity<Usuario> deleteUusario(@PathVariable(value = "id")
Integer userId) {
Usuario user = userRepository.findOne(userId);
if(user == null) {
return ResponseEntity.notFound().build();
}
userRepository.delete(user);
return ResponseEntity.ok().build();
}
@GetMapping("/usuarios/{id}/permisos")
public ResponseEntity<Collection<Permiso>>
getPermisosOfUsuario(@PathVariable(value = "id") Integer userId) {
Usuario user = userRepository.findOne(userId);
if(user == null) {
return ResponseEntity.notFound().build();
}
return ResponseEntity.ok().body(user.getPermisoCollection());
}
}
感谢。
答案 0 :(得分:0)
我使用@JB Nizet提到的对象解决了我的问题。 这是如何运作的:
public class Test1 {
public static void main(String[] args) {
System.out.println("".split(";").length); //1
System.out.println(";".split(";").length);//0
}
}