Spring Boot 2.X 對 web 的開發支持(二)

  • Spring Boot 2.X 對 web 的支持開發

    上章節的 Spring Boot 的入門案例,咱們感覺到 Spring Boot 簡單的配置便可運行項目。前端

    今天瞭解 Spring Boot 對 web 的支持。java

    Spring Boot 對 Web 開發的支持很全面,包括開發、測試和部署階段都作了支持。spring-boot-starter-web
    是 Spring Boot 對 Web 開發提供支持的組件,主要包括 RESTful,參數校驗、使用 Tomcat 做爲內嵌容器器等功能。web

  • Spring Boot 2.X 經常使用註解說明
    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 不容許訪問的錯誤。若是不進⾏設置默認兩種方式的請求都支持。
  • Spring Boot 對 JSON的支持以及經常使用 JSON 註解使用

    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")
  • Spring Boot 常見 web 中的傳遞參數方式

    ① 使用 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 基本上包含了經常使用的數據校驗,包括校驗屬性是否爲空、長度、大小、特定格式等完整的註解本身查表對比。
  • Spring Boot 經常使用獲取讀取配置文件的註解詳解
    @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();
            }
        }
相關文章
相關標籤/搜索