diff --git a/springboot-webflux/pom.xml b/springboot-webflux/pom.xml new file mode 100755 index 0000000..ed47c0e --- /dev/null +++ b/springboot-webflux/pom.xml @@ -0,0 +1,59 @@ + + + 4.0.0 + + springboot + springboot-webflux + 0.0.1-SNAPSHOT + springboot-webflux :: Spring Boot 实现 WebFlux HTTP Restful 服务 + + + + org.springframework.boot + spring-boot-starter-parent + 2.0.0.M3 + + + + 1.2.0 + 5.1.39 + + + + + + + org.springframework.boot + spring-boot-starter-webflux + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + junit + junit + 4.12 + + + + + + + + spring-milestones + Spring Milestones + https://repo.spring.io/libs-milestone + + false + + + + + diff --git a/springboot-webflux/src/main/java/org/spring/springboot/Application.java b/springboot-webflux/src/main/java/org/spring/springboot/Application.java new file mode 100644 index 0000000..d648b6b --- /dev/null +++ b/springboot-webflux/src/main/java/org/spring/springboot/Application.java @@ -0,0 +1,20 @@ +package org.spring.springboot; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * Spring Boot 应用启动类 + * + * Created by bysocket on 09/29/2017. + */ +// Spring Boot 应用的标识 +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + // 程序启动入口 + // 启动嵌入式的 Tomcat 并初始化 Spring 环境及其各 Spring 组件 + SpringApplication.run(Application.class,args); + } +} diff --git a/springboot-webflux/src/main/java/org/spring/springboot/controller/CityRestController.java b/springboot-webflux/src/main/java/org/spring/springboot/controller/CityRestController.java new file mode 100644 index 0000000..ff495b6 --- /dev/null +++ b/springboot-webflux/src/main/java/org/spring/springboot/controller/CityRestController.java @@ -0,0 +1,51 @@ +package org.spring.springboot.controller; + +import org.spring.springboot.domain.City; +import org.spring.springboot.service.CityService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +/** + * 城市 Controller 实现 Restful HTTP 服务 + *

+ * Created by bysocket on 09/29/2017. + */ +@RestController +@RequestMapping(value = "/city") +public class CityRestController { + + @Autowired + private CityService cityService; + + @RequestMapping(value = "/{id}", method = RequestMethod.GET) + public Mono findOneCity(@PathVariable("id") Long id) { + return Mono.create(cityMonoSink -> cityMonoSink.success(cityService.findCityById(id))); + } + + @RequestMapping(method = RequestMethod.GET) + public Flux findAllCity() { + return Flux.create(cityFluxSink -> { + cityService.findAllCity().forEach(city -> { + cityFluxSink.next(city); + }); + cityFluxSink.complete(); + }); + } + + @RequestMapping(method = RequestMethod.POST) + public Mono createCity(@RequestBody City city) { + return Mono.create(cityMonoSink -> cityMonoSink.success(cityService.saveCity(city))); + } + + @RequestMapping(method = RequestMethod.PUT) + public Mono modifyCity(@RequestBody City city) { + return Mono.create(cityMonoSink -> cityMonoSink.success(cityService.updateCity(city))); + } + + @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) + public Mono modifyCity(@PathVariable("id") Long id) { + return Mono.create(cityMonoSink -> cityMonoSink.success(cityService.deleteCity(id))); + } +} diff --git a/springboot-webflux/src/main/java/org/spring/springboot/domain/City.java b/springboot-webflux/src/main/java/org/spring/springboot/domain/City.java new file mode 100644 index 0000000..598af6d --- /dev/null +++ b/springboot-webflux/src/main/java/org/spring/springboot/domain/City.java @@ -0,0 +1,61 @@ +package org.spring.springboot.domain; + +/** + * 城市实体类 + * + * Created by bysocket on 09/29/2017. + */ +public class City { + + /** + * 城市编号 + */ + private Long id; + + /** + * 省份编号 + */ + private Long provinceId; + + /** + * 城市名称 + */ + private String cityName; + + /** + * 描述 + */ + private String description; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getProvinceId() { + return provinceId; + } + + public void setProvinceId(Long provinceId) { + this.provinceId = provinceId; + } + + public String getCityName() { + return cityName; + } + + public void setCityName(String cityName) { + this.cityName = cityName; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } +} diff --git a/springboot-webflux/src/main/java/org/spring/springboot/service/CityService.java b/springboot-webflux/src/main/java/org/spring/springboot/service/CityService.java new file mode 100644 index 0000000..441ffbb --- /dev/null +++ b/springboot-webflux/src/main/java/org/spring/springboot/service/CityService.java @@ -0,0 +1,52 @@ +package org.spring.springboot.service; + +import org.spring.springboot.domain.City; + +import java.util.List; + +/** + * 城市业务逻辑接口类 + * + * Created by bysocket on 09/29/2017. + */ +public interface CityService { + + /** + * 获取城市信息列表 + * + * @return + */ + List findAllCity(); + + /** + * 根据城市 ID,查询城市信息 + * + * @param id + * @return + */ + City findCityById(Long id); + + /** + * 新增城市信息 + * + * @param city + * @return + */ + Long saveCity(City city); + + /** + * 更新城市信息 + * + * @param city + * @return + */ + Long updateCity(City city); + + /** + * 根据城市 ID,删除城市信息 + * + * @param id + * @return + */ + Long deleteCity(Long id); +} diff --git a/springboot-webflux/src/main/java/org/spring/springboot/service/impl/CityServiceImpl.java b/springboot-webflux/src/main/java/org/spring/springboot/service/impl/CityServiceImpl.java new file mode 100644 index 0000000..1a628a6 --- /dev/null +++ b/springboot-webflux/src/main/java/org/spring/springboot/service/impl/CityServiceImpl.java @@ -0,0 +1,50 @@ +package org.spring.springboot.service.impl; + +import org.spring.springboot.domain.City; +import org.spring.springboot.service.CityService; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 城市业务逻辑实现类 + * + * Created by bysocket on 09/29/2017. + */ +@Service +public class CityServiceImpl implements CityService { + + // 模拟数据库,存储 City 信息 + private static Map CITY_DB = new HashMap<>(); + + public List findAllCity() { + return new ArrayList<>(CITY_DB.values()); + } + + public City findCityById(Long id) { + return CITY_DB.get(id); + } + + @Override + public Long saveCity(City city) { + city.setId(CITY_DB.size() + 1L); + CITY_DB.put(city.getId(), city); + return city.getId(); + } + + @Override + public Long updateCity(City city) { + CITY_DB.put(city.getId(), city); + return city.getId(); + } + + @Override + public Long deleteCity(Long id) { + CITY_DB.remove(id); + return id; + } + +} diff --git a/springboot-webflux/src/main/resources/application.properties b/springboot-webflux/src/main/resources/application.properties new file mode 100644 index 0000000..e69de29