我想要 spring-boot-starter-webflux 是 post connection get requestBody
i want spring-boot-starter-webflux is post connection get requestBody
我想我会疯狂的:(
因为ServerRequest
,用了一天。
- WebClient(Chrome浏览器)ajaxpost类型。
- WebServer(SpringBoot Webflux) 使用Handler和Router
- WebSecurity 使用 spring-boot-security.
我的问题是这样的。
Chrome浏览器开发工具
浏览器使用developTool,Network tap是header check。
FormData为输入数据成功。
但是!!!
java 日志检查
我不知道!是什么原因。所以我要疯了。
我介绍来源。
JAVASCRIPT AJAX
$(document).ready(function () {
var data = {"name": "jskang"};
var strData = JSON.stringify(data);
var formData = new FormData();
formData.append("name", "jskang123");
$.ajax({
url: "/statistics/systemEnvironment/function2",
type: "post",
data: strData,
contentType: "application/json",
success: function (data) {
console.log(data);
}
});
});
服务器 Webflux 路由器
@Configuration
@EnableWebFlux
public class RouterConfig implements ApplicationContextAware, WebFluxConfigurer {
private ApplicationContext context;
@Bean /* menu setting */
public RouterFunction<ServerResponse> preSystemEnvironmentRoutes(SystemEnvironmentHandler handler) {
return route()
.GET("/statistics/systemEnvironment/function1/{name}", accept(MediaType.APPLICATION_JSON), handler::function1)
.POST("/statistics/systemEnvironment/function2", accept(MediaType.APPLICATION_JSON), handler::function2)
.build();
}
//////* Thymeleaf webflux setting start *//////
@Override
public void setApplicationContext(ApplicationContext context) {
this.context = context;
}
@Bean
public ITemplateResolver thymeleafTemplateResolver() {
final SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
resolver.setApplicationContext(this.context);
resolver.setPrefix("classpath:templates/");
resolver.setSuffix(".html");
resolver.setTemplateMode(TemplateMode.HTML);
resolver.setCacheable(false);
resolver.setCheckExistence(false);
return resolver;
}
@Bean
public ISpringWebFluxTemplateEngine thymeleafTemplateEngine() {
SpringWebFluxTemplateEngine templateEngine = new SpringWebFluxTemplateEngine();
templateEngine.setTemplateResolver(thymeleafTemplateResolver());
return templateEngine;
}
@Bean
public ThymeleafReactiveViewResolver thymeleafReactiveViewResolver() {
ThymeleafReactiveViewResolver viewResolver = new ThymeleafReactiveViewResolver();
viewResolver.setTemplateEngine(thymeleafTemplateEngine());
return viewResolver;
}
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
ThymeleafReactiveViewResolver viewResolver = new ThymeleafReactiveViewResolver();
viewResolver.setTemplateEngine(thymeleafTemplateEngine());
registry.viewResolver(thymeleafReactiveViewResolver());
}
//////* Thymeleaf webflux setting end *//////
}
}
服务器 Webflux 处理程序
@Component
public class SystemEnvironmentHandler {
/**
* The constant LOG.
*/
private static final Logger LOG = getLogger(SystemEnvironmentHandler.class);
public Mono<ServerResponse> function1(ServerRequest request) {
LOG.info("SystemEnvironmentHandler function1 run");
String variable = request.pathVariable("name");
Mono<String> response = Mono.just(variable);
return ServerResponse.ok().body(response, String.class);
}
public Mono<ServerResponse> function2(ServerRequest request) {
LOG.info("SystemEnvironmentHandler function1 run");
System.out.println("\n========= request check ==========");
System.out.println(request.attributes().get("name"));
System.out.println(request.formData().toProcessor());
System.out.println(request.queryParams());
System.out.println(request);
System.out.println("\n========= mono1 check ==========");
Mono<Name> mono1 = request.bodyToMono(new Name().getClass());
System.out.println(mono1);
System.out.println("\n========= mono2 check ==========");
Mono<Name> mono2 = request.bodyToMono(Name.class);
System.out.println(mono2);
System.out.println("\n========= mono3 check ==========");
Mono<MultiValueMap<String, String>> mono3 = request.body(BodyExtractors.toFormData());
System.out.println(mono3);
System.out.println(mono3.toProcessor().peek());
System.out.println("\n========= formdata check ==========");
MultiValueMap formData = request.exchange().getFormData().toProcessor().peek();
System.out.println(formData);
Mono<String> response = Mono.just(new String("SystemEnvironmentHandler - function2"));
return ServerResponse.ok().body(response, String.class);
}
public class Name{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
你打印的是Monos,而不是Monos里面的内容。尝试打印内容而不是 Monos。对于测试,您也可以这样做。
return serverRequest
.bodyToMono(Name.class)
.map(name-> {
System.out.println(name);
return name;
})
.then(ServerResponse
.ok()
.body(response, String.class));
P.S。我不能 post 只是评论。还没有限制。
我想我会疯狂的:(
因为ServerRequest
,用了一天。
- WebClient(Chrome浏览器)ajaxpost类型。
- WebServer(SpringBoot Webflux) 使用Handler和Router
- WebSecurity 使用 spring-boot-security.
我的问题是这样的。
Chrome浏览器开发工具
浏览器使用developTool,Network tap是header check。
FormData为输入数据成功。
但是!!!
java 日志检查
我不知道!是什么原因。所以我要疯了。
我介绍来源。
JAVASCRIPT AJAX
$(document).ready(function () {
var data = {"name": "jskang"};
var strData = JSON.stringify(data);
var formData = new FormData();
formData.append("name", "jskang123");
$.ajax({
url: "/statistics/systemEnvironment/function2",
type: "post",
data: strData,
contentType: "application/json",
success: function (data) {
console.log(data);
}
});
});
服务器 Webflux 路由器
@Configuration
@EnableWebFlux
public class RouterConfig implements ApplicationContextAware, WebFluxConfigurer {
private ApplicationContext context;
@Bean /* menu setting */
public RouterFunction<ServerResponse> preSystemEnvironmentRoutes(SystemEnvironmentHandler handler) {
return route()
.GET("/statistics/systemEnvironment/function1/{name}", accept(MediaType.APPLICATION_JSON), handler::function1)
.POST("/statistics/systemEnvironment/function2", accept(MediaType.APPLICATION_JSON), handler::function2)
.build();
}
//////* Thymeleaf webflux setting start *//////
@Override
public void setApplicationContext(ApplicationContext context) {
this.context = context;
}
@Bean
public ITemplateResolver thymeleafTemplateResolver() {
final SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
resolver.setApplicationContext(this.context);
resolver.setPrefix("classpath:templates/");
resolver.setSuffix(".html");
resolver.setTemplateMode(TemplateMode.HTML);
resolver.setCacheable(false);
resolver.setCheckExistence(false);
return resolver;
}
@Bean
public ISpringWebFluxTemplateEngine thymeleafTemplateEngine() {
SpringWebFluxTemplateEngine templateEngine = new SpringWebFluxTemplateEngine();
templateEngine.setTemplateResolver(thymeleafTemplateResolver());
return templateEngine;
}
@Bean
public ThymeleafReactiveViewResolver thymeleafReactiveViewResolver() {
ThymeleafReactiveViewResolver viewResolver = new ThymeleafReactiveViewResolver();
viewResolver.setTemplateEngine(thymeleafTemplateEngine());
return viewResolver;
}
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
ThymeleafReactiveViewResolver viewResolver = new ThymeleafReactiveViewResolver();
viewResolver.setTemplateEngine(thymeleafTemplateEngine());
registry.viewResolver(thymeleafReactiveViewResolver());
}
//////* Thymeleaf webflux setting end *//////
}
}
服务器 Webflux 处理程序
@Component
public class SystemEnvironmentHandler {
/**
* The constant LOG.
*/
private static final Logger LOG = getLogger(SystemEnvironmentHandler.class);
public Mono<ServerResponse> function1(ServerRequest request) {
LOG.info("SystemEnvironmentHandler function1 run");
String variable = request.pathVariable("name");
Mono<String> response = Mono.just(variable);
return ServerResponse.ok().body(response, String.class);
}
public Mono<ServerResponse> function2(ServerRequest request) {
LOG.info("SystemEnvironmentHandler function1 run");
System.out.println("\n========= request check ==========");
System.out.println(request.attributes().get("name"));
System.out.println(request.formData().toProcessor());
System.out.println(request.queryParams());
System.out.println(request);
System.out.println("\n========= mono1 check ==========");
Mono<Name> mono1 = request.bodyToMono(new Name().getClass());
System.out.println(mono1);
System.out.println("\n========= mono2 check ==========");
Mono<Name> mono2 = request.bodyToMono(Name.class);
System.out.println(mono2);
System.out.println("\n========= mono3 check ==========");
Mono<MultiValueMap<String, String>> mono3 = request.body(BodyExtractors.toFormData());
System.out.println(mono3);
System.out.println(mono3.toProcessor().peek());
System.out.println("\n========= formdata check ==========");
MultiValueMap formData = request.exchange().getFormData().toProcessor().peek();
System.out.println(formData);
Mono<String> response = Mono.just(new String("SystemEnvironmentHandler - function2"));
return ServerResponse.ok().body(response, String.class);
}
public class Name{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
你打印的是Monos,而不是Monos里面的内容。尝试打印内容而不是 Monos。对于测试,您也可以这样做。
return serverRequest
.bodyToMono(Name.class)
.map(name-> {
System.out.println(name);
return name;
})
.then(ServerResponse
.ok()
.body(response, String.class));
P.S。我不能 post 只是评论。还没有限制。