Oryx on top of a dune in the NamibRand Nature Reserve, Namibia.
下載本文完整項目代碼 Github
本文在 Spring Boot 構建項目基礎上進行的,如果讀者想要了解 Spring Boot 項目如何創建請參考Try Cloud Foundry 7 - Spring Boot。
Spring Web
Setup Spring Web
如果你的Spring Boot項目裡還沒有添加Spring Web依賴,可以添加如下組件:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Build Restful API
使用 @RestController
@RequestMapping
可以编写我们的 Restful API。
@RestController
@RequestMapping("/hero")
public class HeroController {
@Autowired(required = false) HeroRepository heroRepository;
@RequestMapping("")
Iterable<Hero> getAll() {
return heroRepository.findAll();
}
@RequestMapping(path="", method=RequestMethod.POST)
Hero create(@RequestBody Hero hero) {
return heroRepository.save(hero);
}
@RequestMapping("/{id}")
Hero get(@PathVariable BigInteger id) {
return heroRepository.findOne(id);
}
@RequestMapping(path="/{id}", method=RequestMethod.DELETE)
void delete(@PathVariable BigInteger id) {
heroRepository.delete(id);
}
}
啟動應用程序可訪問鏈接 http://127.0.0.1:8080/hero
Spring Data Commons
如果你的項目使用了 Spring Data framework 的話,參考文檔Spring Data Commons - Reference Documentation - 3.8.2. Web support 配置對 Web 的支持。
如果是註解的方式可以如下配置:
@Configuration
@EnableWebMvc
@EnableSpringDataWebSupport
class WebConfiguration { }
@EnableSpringDataWebSupport
註解會啟動對Restful API的特性的支持。
如果使用了 Spring Boot @EnableAutoConfiguration
自動發現配置功能(@SpringBootApplication
包含了@EnableAutoConfiguration
),則不需要@EnableSpringDataWebSupport
,Spring Boot會自動查找到 SpringDataWebConfiguration
並進行正確的配置。
如果你仍然在使用xml配置方式:
<bean class="org.springframework.data.web.config.SpringDataWebConfiguration" />
<!-- If you're using Spring HATEOAS as well register this one *instead* of the former -->
<bean class="org.springframework.data.web.config.HateoasAwareSpringDataWebConfiguration" />
以上方式中的 Spring HATEOAS 都是在你把 Spring HATEOAS 組件加入項目依賴中自動發現配置的。
Paging and Sorting
把Crud換成PagingAndSortingRepository
public interface HeroRepository extends PagingAndSortingRepository<Hero, BigInteger> {
}
然後 RestController
的 query method 加上參數 Pageable pageable
:
@RequestMapping("")
Page<Hero> getAll(Pageable pageable) {
return heroRepository.findAll(pageable);
}
最終在查詢時使用的參數格式為: http://127.0.0.1:8080/hero?size=2&page=1&sort=name,desc
Spring Data Rest
Spring 提供了更为简便的方式创建 Restful APIs , Spring Data REST is part of the umbrella Spring Data project and makes it easy to build hypermedia-driven REST web services on top of Spring Data repositories.
Basics
Spring data rest configuration with Maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
為 Hero Repository 添加註解 @RepositoryRestResource(collectionResourceRel = "heros", path = "heros")
,為了與@RestController
說明的 Restful api 區分這裡使用heros
作為路徑。
@RepositoryRestResource(collectionResourceRel = "heros", path = "/heros")
public interface HeroRepository extends CrudRepository<Hero, BigInteger> {
}
啟動應用 mvn spring-boot:run
則可以看到 hero 的 restful apis :
http://127.0.0.1:8080/heros
Spring Data REST uses the HAL format for JSON output. It is flexible and offers a convenient way to supply links adjacent to the data that is served.
More
你的 HeroRespository 也可以继承 PagingAndSortingRepository
或者 MongoRepository
之类的,可以提供更为丰富的 Restful 功能。
Comments