Java SpringWebMVC.fn发布重定向获取

Java SpringWebMVC.fn发布重定向获取,java,spring,spring-boot,spring-mvc,post-redirect-get,Java,Spring,Spring Boot,Spring Mvc,Post Redirect Get,我试图用WebMVC.fn实现一个POST-Redirect-GET,但没有成功。 我知道如何使用基于注释的控制器,但使用功能路由时,事情会变得复杂 我有一个关于这个处理程序的问题。一个函数呈现表单,另一个函数保存资源。经过一些验证后,我希望视图呈现错误 到目前为止,这就是我所拥有的 BookResourceHandler.java @Override // /GET books/create public ServerResponse create(ServerRequest requ

我试图用WebMVC.fn实现一个POST-Redirect-GET,但没有成功。 我知道如何使用基于注释的控制器,但使用功能路由时,事情会变得复杂

我有一个关于这个处理程序的问题。一个函数呈现表单,另一个函数保存资源。经过一些验证后,我希望视图呈现
错误

到目前为止,这就是我所拥有的

BookResourceHandler.java

@Override
// /GET books/create
    public ServerResponse create(ServerRequest request) {
//        TODO show user libraries / shelves
        Map<String, Object> model = new HashMap<>();
        model.put("purposes", this.purposeService.getAllPurposes());
        model.put("libraries", Collections.emptyList());
        model.put("bookshelves", Collections.emptyList());
        model.put("form", new StoreBookRequest());

        return renderView("create", model);
    }
@覆盖
///获取书籍/创建
公共服务器响应创建(服务器请求){
//TODO显示用户库/工具架
映射模型=新的HashMap();
model.put(“purposes”,this.purposeService.getAllPurposes());
put(“libraries”,Collections.emptyList());
model.put(“bookshelfs”,Collections.emptyList());
model.put(“form”,newstorebookrequest());
返回renderView(“创建”,模型);
}
@覆盖
//邮递/书籍
公共服务器响应存储(服务器请求){
ObjectMapper mapper=新的ObjectMapper();
Map params=request.params().toSingleValueMap();
参数移除(“_csrf”);
StoreBookRequest dto=mapper.convertValue(参数,StoreBookRequest.class);
Errors=newbeanPropertyBindingResult(dto,“创建”);
this.validator.validate(dto,错误);
if(errors.hasErrors()){
映射模型=新的HashMap();
模型。付诸表决(“形式”,dto);
model.put(“errors”,errors.getFieldErrors());
返回重定向视图(HttpStatus.BAD_请求,URI.create(booksourcerouter.RESOURCE_URL+“/create”),“create”,model);
}
这个.bookService.saveBook(dto);
返回重定向视图(URI.create(BookResourceRouter.RESOURCE_URL+“/create”),“create”);
}
使用
HTTPStatus.BAD_REQUEST
时,链接将更改为
/books
(另一个端点用于显示已保存书籍的列表),视图
create
呈现时出现
错误

如果我将状态更改为
HTTPStatus.TEMPORARY\u REDIRECT
HTTPStatus.PERMANENT\u REDIRECT
浏览器将重定向到
/books
,但作为
POST

如果将其更改为
HTTPStatus.FOUND
(与重定向:/u端点相同)
错误
丢失

我做错了什么?或者也许不是这样

我读到Webflux是不可能做到的,我觉得这不是做p-R-G的正确方法

@Override
// POST /books
    public ServerResponse store(ServerRequest request) {
        ObjectMapper mapper = new ObjectMapper();
        Map<String, String> params = request.params().toSingleValueMap();
        params.remove("_csrf");

        StoreBookRequest dto = mapper.convertValue(params, StoreBookRequest.class);
        Errors errors = new BeanPropertyBindingResult(dto, "create");
        this.validator.validate(dto, errors);

        if (errors.hasErrors()) {
            Map<String, Object> model = new HashMap<>();
            model.put("form", dto);
            model.put("errors", errors.getFieldErrors());

            return redirectView(HttpStatus.BAD_REQUEST, URI.create(BookResourceRouter.RESOURCE_URL + "/create"), "create", model);
        }

        this.bookService.saveBook(dto);
        return redirectView(URI.create(BookResourceRouter.RESOURCE_URL + "/create"), "create");
    }