一、函数式web
SpringMVC 5.2以后 允许我们使用函数式的方式,定义Web的请求处理流程。函数式接口
Web请求处理的方式:①、
@Controller + @RequestMapping:耦合式 (路由、业务耦合)②、函数式Web:分离式(路由、业务分离)。参考案例代码:
业务逻辑处理:
@Service @Slf4j public class PersonService { /** * 查询信息 * @param serverRequest * @return */ public ServerResponse getPerson(ServerRequest serverRequest){ String id = serverRequest.pathVariable("id"); log.info("查询用户id{}:",id); //业务处理 Person person = new Person(1L, "张三", "123456qq@.com", 20); //构造响应 return ServerResponse.ok().body(person); } /** * 查询所有用户 * @param serverRequest * @return */ public ServerResponse getPersons(ServerRequest serverRequest){ //业务处理 List<Person> people = Arrays.asList( new Person(1L, "张三", "123456qq@.com", 20), new Person(2L, "李四", "123457qq@.com", 21), new Person(3L, "王五", "123458qq@.com", 22)); //构造响应 return ServerResponse.ok().body(people); } /** * 保存用户 * @param serverRequest * @return */ public ServerResponse addPerson(ServerRequest serverRequest){ //业务处理 log.info("保存成功"); //构造响应 return ServerResponse.ok().build(); } /** * 修改成功 * @param serverRequest * @return */ public ServerResponse updatePerson(ServerRequest serverRequest){ //业务处理 log.info("修改成功"); //构造响应 return ServerResponse.ok().build(); } /** * 删除成功 * @param serverRequest * @return */ public ServerResponse removePerson(ServerRequest serverRequest){ //业务处理 log.info("删除成功"); //构造响应 return ServerResponse.ok().build(); } }接口管理:
@Configuration public class WebFunctionConfig { /** * 函数式web:给容器中放一个RouterFunction<ServerResponse>的bean,统一路由管理 * 核心四大对象 * RouterFunction:定义路由信息。发什么请求,由谁来处理 * RequestPredicate:定义请求规则:请求方式、请求参数 * ServerRequest:封装请求完整数据 * ServerResponse:封装响应完整数据 * * @return */ @Bean public RouterFunction<ServerResponse> personRoute(PersonService personService){ RouterFunction<ServerResponse> routerFunction = RouterFunctions .route()//开始定义路由信息 .GET("/person/{id}", RequestPredicates.accept(MediaType.ALL), personService::getPerson) .GET("/persons", personService::getPersons) .POST("/addPerson", RequestPredicates.accept(MediaType.APPLICATION_JSON), personService::addPerson) .PUT("/updatePerson/{id}", RequestPredicates.accept(MediaType.APPLICATION_JSON), personService::updatePerson) .DELETE("/removePerson/{id}", personService::removePerson) .build(); return routerFunction; } }
8310

被折叠的 条评论
为什么被折叠?



