Post-Redirect - Получить с помощью Spring WebFlux и Thymeleaf - PullRequest
0 голосов
/ 25 ноября 2018

Может кто-нибудь объяснить мне, как реализовать шаблон post-redirect-get в Spring WebFlux и Thymeleaf? Что подписывается на метод сохранения базы данных?

@GetMapping("/register")
public String showRegisterForm(Model model) {
    model.addAttribute("user", new User());

    return "register";
}

@PostMapping
public String processRegisterForm(@Valid User user, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
        return "register";
    } else {
        userRepository.save(user); //what subscribes on this?
        //how to redirect on e.g. "/login"?
    }
}

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Просто для протокола я рекомендую решение, которое написал Брайан, так как оно выражает намерение гораздо лучше.Однако, если вы хотите произвести впечатление на своих друзей.Вот некоторые из них без оператора if.

@PostMapping
public Mono<String> processRegisterForm(@Valid User user, BindingResult bindingResult) {

    return Mono
            .just(bindingResult.hasErrors())
            .filter(t -> t)
            .flatMap( t-> Mono.just("register"))
            .switchIfEmpty(userRepository.save(user).thenReturn("redirect:/login"));
}
0 голосов
/ 25 ноября 2018

Вы можете заставить свой метод контроллера возвращать реактивный тип, подобный этому:

@PostMapping
public Mono<String> processRegisterForm(@Valid User user, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
        return Mono.just("register");
    } else {
        return userRepository.save(user).thenReturn("redirect:/login");
    }
}
...