Se a relação do Usuário com o Endereço é 1:N (um usuário pode ter múltiplos endereços), então a sua tabela de endereços deve conter um constraint de uma chave estrangeira (pesquise como fazer isso com base no banco que estiver utilizando), assim o banco irá garantir que a coluna contendo o id do usuário deve corresponder a uma entrada existente na tabela de usuários.
Outra coisa que notei, é que no seu exemplo a senha está em plain text (se for só um exemplo mesmo e você já souber disso, pode desconsiderar, mas vale a pena falar sobre). Para salvar senhas dos usuários em bancos, é extremamente recomendado que se utilize hash, procurar saber mais sobre isso que é bem importante.
A senha é apenas um demo. Bem, o meu objetivo é fazer que o usuário logado ao cadastrar um novo endereço que fique salvo no id que pertence a ele, não que fica null no banco de dados. Talvez estou me expressando errado, mas fiz outro teste e sinto que to errando.
@RestController
@RequestMapping("/users")
@AllArgsConstructor
public class UserController {
private final UserService service;
@PostMapping("/")
public ResponseEntity<User> createUser(@RequestBody User entity) {
return ResponseEntity
.status(HttpStatus.CREATED)
.body(service.createUser(entity));
}
@PostMapping("/{userId}/address")
public ResponseEntity<Address> createAddress(@PathVariable UUID userId,
@RequestBody Address entity) {
return ResponseEntity
.status(HttpStatus.CREATED)
.body(service.createAddress(userId, entity));
}
@GetMapping("/{userId}")
public ResponseEntity<User> getUserById(@PathVariable UUID userId) {
return ResponseEntity
.status(HttpStatus.OK)
.body(service.getUserById(userId));
}
@GetMapping("/{userId}/{addressId}")
public ResponseEntity<Optional<Address>> getAddressById(@PathVariable UUID userId,
@PathVariable UUID addressId) {
return ResponseEntity
.status(HttpStatus.OK)
.body(service.getAddressById(userId, addressId));
}
}