Java SpringWebMVC.fn发布重定向获取
我试图用WebMVC.fn实现一个POST-Redirect-GET,但没有成功。 我知道如何使用基于注释的控制器,但使用功能路由时,事情会变得复杂 我有一个关于这个处理程序的问题。一个函数呈现表单,另一个函数保存资源。经过一些验证后,我希望视图呈现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
错误
到目前为止,这就是我所拥有的
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");
}