Sterowanie encją (Spring Security, Data JPA, Web MVC)

0

W jaki sposób powinno odbywać się sterowanie encją - mam na myśli przekazywanie informacji, na którym użytkowniku(encja) powinna zostać wykonana jakaś operacja?
Próbowałem w taki sposób - przekazując konkretną encję w modelu, jednak po wciśnięciu "Increase rank"(wykonaniu metody POST "/increase", gdzie powininna być przekazana encja usera, a przekazany jest null) wyrzuca NullPointerException, przy wywołaniu metody user.increase().

java.lang.NullPointerException: null
	at User.increase()
	at MainController.increase()
@Entity
@Table(name = "user", uniqueConstraints = @UniqueConstraint(columnNames ={"email"}))
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String email;
    private int rank;

    public void increase() {
    rank++;
    }
}
@Controller
public class MainController {
    @Autowired
    UserRepository userRepository;

    @GetMapping("/login")
    public String login() {
        return "login";
    }

    @GetMapping("/")
    public String home(Model model) {
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        User user = userRepository.findByEmail(auth.getName());
        model.addAttribute("loggedUser", user);
        return "home";
    }

    @PostMapping("/increase")
    public String increase(@ModelAttribute("loggedUser") User user){
        user.increase();
        return "redirect:/";
    }
}
html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Welcome</title>
</head>
<body>
    Name: <span th:text = "${loggedUser.email}"></span>

    <form th:action="@{/increase}" method="post" th:object="${loggedUser}">
        <button type="submit">Increase rank</button>
    </form>
</body>
</html>
4

Myślę, że powieneś najpierw DOBRZE opanować Javę, fundamenty i trochę ponad, i w tym czasie nie tykać się JPA ani Springa. Tylko zrobi Ci krzywdę

Rozkłada cię najbardziej podstawowy wyjątek, jaki się w javie może zdarzyć, z którym jesteś bezradny.

Dwa kroki wstecz, dla własnego dobra.

2

Obawiam się że:

  1. Zupełnie nie rozumiesz jak działa JPA i czym są detached objects
  2. Zupełnie nie rozumiesz jak działa REST i w ogóle jak to się dzieje ze tam w kontrolerze masz jakis obiekt

To co napisałeś nie ma żadnego sensu. Z formularza to ty możesz sobie wysłać co najwyżej jakieś dane, co więcej musisz te dane explicite w formularzu umieścić (!) jakimiś polami hidden. Teraz z formularza wysłałeś nic. Dalej na podstawie tych danych musiałbyś pobrać jakieś entity powiązane z wpisem w bazie danych i dopiero na takim entity mógłbyś wykonać jakaś operacje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1