handler
@Autowired
private CityService cityService;
public Mono<ServerResponse> saveCity(ServerRequest request){
Map<String, String> queryParams = request.exchange().getRequest().getQueryParams().toSingleValueMap();
City city = JSON.parseObject(JSON.toJSONString(queryParams), City.class);
Flux<City> save = cityService.save(city);
return ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(save, City.class);
}
public Mono<ServerResponse> deleteCity(ServerRequest request){
Integer id = Integer.parseInt(Objects.requireNonNull(request.exchange().getRequest().getQueryParams().getFirst("id")));
cityService.deleteById(id);
return ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(Flux.just(new HttpRes("删除成功", 200)), Object.class);
}
public Mono<ServerResponse> updateCity(ServerRequest request){
int id = Integer.parseInt(Objects.requireNonNull(request.exchange().getRequest().getQueryParams().getFirst("id")));
String cityName = request.exchange().getRequest().getQueryParams().getFirst("cityName");
String cityIntroduce = request.exchange().getRequest().getQueryParams().getFirst("cityIntroduce");
Flux<City> save = cityService.save(new City(id, cityName, cityIntroduce));
return ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(save, City.class);
}
public Mono<ServerResponse> getCityById(ServerRequest request){
int id = Integer.parseInt(Objects.requireNonNull(request.exchange().getRequest().getQueryParams().getFirst("id")));
Flux<City> byId = cityService.findById(id);
return ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(byId, City.class);
}
router代码
@Bean
public RouterFunction<ServerResponse> monoRouterFunction(CityHandler handler) {
return RouterFunctions.route(
RequestPredicates.POST("/saveCity")
.and(RequestPredicates.accept(MediaType.APPLICATION_JSON)), handler::saveCity)
.andRoute(RequestPredicates.GET("/deleteCity")
.and(RequestPredicates.accept(MediaType.APPLICATION_JSON)), handler::deleteCity)
.andRoute(RequestPredicates.GET("/updateCity")
.and(RequestPredicates.accept(MediaType.APPLICATION_JSON)), handler::updateCity)
.andRoute(RequestPredicates.GET("/getCityById")
.and(RequestPredicates.accept(MediaType.APPLICATION_JSON)), handler::getCityById);
}
问题总结:
使用request.pathVariable获取不到请求参数,使用request.exchange().getRequest().getQueryParams().getFirst(“name”)替代,
当然也可以直接用JSON将request.exchange().getRequest().getQueryParams().toSingleValueMap()转换成实体使用。