上章節的 Spring Boot 的入門案例,咱們感覺到 Spring Boot 簡單的配置便可運行項目。前端
今天瞭解 Spring Boot 對 web 的支持。java
Spring Boot 對 Web 開發的支持很全面,包括開發、測試和部署階段都作了支持。spring-boot-starter-web
是 Spring Boot 對 Web 開發提供支持的組件,主要包括 RESTful,參數校驗、使用 Tomcat 做爲內嵌容器器等功能。web
get: 查詢一些信息 post:提交一些須要服務器保存的信息 put: 更新,更新一些用戶信息 delete:刪除信息 @GetMapping = @RequestMapping(method = RequestMethod.GET) @PostMapping = @RequestMapping(method = RequestMethod.POST) @PutMapping = @RequestMapping(method = RequestMethod.PUT) @DeleteMapping = @RequestMapping(method = RequestMethod.DELETE) eg: @RequestMapping(value="/user",method = RequestMethod.GET)等同於 @GetMapping(value = "/user") 若是指定以 Post 的方式去請求,而後使用 Get 的方式(或其餘非 post 請求方式)去請求的話,則會報 405 不容許訪問的錯誤。若是不進⾏設置默認兩種方式的請求都支持。
JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。易於人閱讀和編寫。同時也易於機器解析和生成。如今大部分的數據交互方式都採用 JSON。 而 Spring Boot 對 JSON 支持很完善,在 Web 層僅須要一個註解便可。spring
性能:Jackson > FastJson > Gson > Json-lib 同個結構。json
jackson處理相關自動(在實體類字段上使用如下註解) 指定字段不返回:@JsonIgnore 指定日期格式:@JsonFormat(pattern="yyyy-MM-dd hh:mm:ss",locale="zh",timezone="GMT+8") 空字段不返回:@JsonInclude(Include.NON_NUll) --->對於字符串類型的不返回,int類型的返回0 指定別名: @JsonProperty("XXXX")
① 使用 URL 進行傳參:@PathVariable 能夠將 URL 中佔位符參數綁定到控制器處理方法的入參中,如 URL 中的 {xxx} 佔位符能夠經過@PathVariable(「xxx「) 綁定到操做方法的入參中。瀏覽器
@RequestMapping(value="get/{name}", method=RequestMethod.GET) public String get(@PathVariable String name) { return name; } 在瀏覽器中輸入網址:http://localhost:8080/get/Rookie,返回:Rookie,說明 name 值已經成功傳入。
②數據校驗:Web開發中最多見的就是輸入數據的校驗。服務器
在 Spring MVC 中有兩種方式能夠驗證輸入:Spring 自帶的驗證框架和利用 JSR 實現。app
JSR 是一個規範文檔,指定了一整套 API,經過標註給對象屬性添加約束。框架
Hibernate Validator 就是 JSR 規範的具體實現。spring-boot
Spring Boot 的參數校驗依賴於 hibernate-validator 來進行。
使用 Hibernate Validator 校驗數據,須要定義一個接收的數據模型,使用註解的形式描述字段校驗的 規則。
實體類: @Getter @Setter @ToString @AllArgsConstructor @NoArgsConstructor public class Person { @NotEmpty(message="姓名不能爲空") private String name; @Max(value = 100, message = "年齡不能大於100歲") @Min(value= 18 ,message= "必須年滿18歲!" ) private int age; @NotEmpty(message="密碼不能爲空") @Length(min=6,message="密碼長度不能小於6位") private String pass; } 請求接口: @RestController public class PersonController { @RequestMapping("/savePerson") public void savePerson(@Valid Person person, BindingResult result) { System.out.println("Person:"+person); if(result.hasErrors()){ List<ObjectError> errorList = result.getAllErrors(); errorList.stream().forEach(error-> System.out.println(error.getCode()+"====="+error.getDefaultMessage())); } } } 編寫測試類: @Test public void savePerson() throws Exception { mockMvc.perform(MockMvcRequestBuilders.post("/savePerson") .param("name","") .param("age","666") .param("pass","test") ); } 測試結果顯示: Person:Person(name=, age=666, pass=test) Length=====密碼長度不能小於6位 Max=====年齡不能大於100歲 NotEmpty=====姓名不能爲空 結果顯示已觸發了校驗規則,返回錯誤信息。在實際開發過程當中可對錯誤信息進行包裝,最後返回到前端展現。 @Valid:參數前面添加 @Valid 註解,表明此對象使用了參數校驗; BindingResult:參數校驗的結果會存儲在此對象中,能夠將錯誤信息打印出來。 Hibernate Validator 基本上包含了經常使用的數據校驗,包括校驗屬性是否爲空、長度、大小、特定格式等完整的註解本身查表對比。
@PropertySource 指定配置文件位置 @ConfigurationProperties 標註該註解的類與配置文件進行綁定,經過設置的前綴,來進行屬性設置。 代碼演示: Author 類: @Component @PropertySource("author.properties") @ConfigurationProperties(prefix = "author") public class Author { //Value("${author.name}") private String name; //Vlue("${author.age}") private int age; } author.properties 配置文件 # 配置做者信息 author.name=rookie author.age=18 啓動類: @RestController @SpringBootApplication public class ConfigFileDemoApplication { public static void main(String[] args) { SpringApplication.run(ConfigFileDemoApplication.class, args); } @Autowired private Author author; @GetMapping("/author") public String getAuthor(){ return "姓名:"+author.getName()+"==========="+"年齡:"+author.getAge(); } }
由於咱們在 Author 類中已經加了 @Component 註解,所以能夠將此註解下的類做爲 bean 注入到 Spring 容器中,方便使用。
使用頻次最高的就是 @PropertySource & @ConfigurationProperties 配合使用,須要注意的是當在 resources 下再建立 config 文件夾,再將 author.properties 放進 config 文件夾時,須要修改@PropertySource("classpath:config /author.properties") 才能夠正確讀取配置路徑。
當沒使用 @ConfigurationProperties(prefix = "author") 註解的時,要想獲得配置文件中屬性,則須要結合如下註解進行數據源的配置(以上面 Author 類註釋掉的部分爲例):
@Value("${author.name}")
@Value("${author.age}")也能夠直接寫在 application.properties 中(不建議這麼作,但若是是全局變量提倡這種方法),當寫在此文件中時,不須要指明資源文件路勁,只須要指明前綴便可。
@ImportResource 將外部的配置文件加載到程序中來。 若是要讓編寫的 Spring 配置文件生效,如 beans.xml,可使用 @ImportResource 註解,將配置文件導入進來。 代碼演示: Student 類 @Getter @Setter public class Student { private String name; private String sex; private String phone; } rookie.xml 文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="student" class="com.rookie.model.Student"> <property name="name" value="jack"/> <property name="sex" value="男人"/> <property name="phone" value="132659896254"/> </bean> </beans> 啓動類 @RestController @SpringBootApplication @ImportResource(locations = "classpath:rookie.xml") public class ConfigFileDemoApplication { public static void main(String[] args) { SpringApplication.run(ConfigFileDemoApplication.class, args); } @Autowired private Student student; @GetMapping("/student") public String getStudent(){ return "姓名:"+student.getName()+"==========="+"性別:"+student.getSex()+"==========="+"手機號:"+student.getPhone(); } }