Spring Boot 這個框架非常好用,有很多現成的功能可以透過註解實現
App
@SpringBootApplication //相當於以下三個
@ComponentScan
@Configuration
@EnableAutoConfiguration
Component
@Autowired //自動注入
//有 Component 註解才能使用 Autowired
//功能一樣,語意不同
@Component
@Configuration
@Bean
@Repository
@Service
@Controller
@RestController //等同 @Controller + @ResponseBody
請求
@RequestMapping(value="/do", method=RequestMethod.GET)
@RequestMapping(value="/do", method=RequestMethod.POST)
@RequestMapping(value="/do", method=RequestMethod.PUT)
@RequestMapping(value="/do", method=RequestMethod.DELETE)
@RequestMapping(value="/do", method=RequestMethod.PATCH)
//簡寫
@GetMapping("/do")
@PostMapping("/do")
@PutMapping("/do/{id}") //更新
@DeleteMapping("/do/{id}")
@PatchMapping("/do") //部分更新
接收前端傳值
@PathVariable("id") //路徑上的參數
@RequestParam(value="message", default="Hello", required=false) //問號後的參數
@RequestBody //JSON轉Java bean
@RequestAttribute
@RequestHeader
讀取配置文件
// .yml
@Value("${message}")
@ConfigurationProperties(prefix = "user") //轉為bean
// .properties
@PropertySource("classpath:test.properties") //先指定 properties
@Value("${message}")
JPA
@Entity // 資料庫實體
@Table(name = "test_table") // class 與 table 名稱相同時可以省略
@Column(name="user_name", nullable=false, length=32) // 欄位設定
@Transient // 忽略的 field
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE) // Oracle的自增
@GeneratedValue(strategy=GenerationType.IDENTITY) // MySQL與SQL Server的自增
@GeneratedValue(strategy=GenerationType.AUTO)
@DateTimeFormat(pattern = "yyyy-MM-dd") //時間日期格式
校驗 Validation
即使前端有驗證,保險起見後端仍需再驗證
皆可設定 message = “error” 提示錯誤訊息
// All
@Null // e == null
@NotNull // e != null
@Min(value) // num >= value
@Max(value) // num <= value
@Size(min=1, max=123) // between
@Length(min=1, max=123)
@Range(min=1, max=123)
@Pattern(regex="") // 符合正規表達式
// String
@NotEmpty(message="is empty") // str != null && !str.equals("")
@NotBlank(message="is blank") // str != null && !str.equals("\s")
@Email(message="is not email") // 符合 email 格式
// Number
@Digits // is number
@DecimalMin(value) // num >= value
@DecimalMax(value) // num <= value
@Negative // num < 0
@NegativeOrZero // num <= 0
@Positive // num > 0
@PositiveOrZero // num >= 0
// Boolean
@AssertTrue // e == true
@AssertFalse // e == false
// Date
@Past // date < now
@PastOrPresent // date <= now
@Future // date > now
@FutureOrPresent // date >= now
@Validated // class 設定
@Valid // 參數為bean設定
JSON
@ResponseBody
@RequestBody
@JsonIgnoreProperties({"role"}) // 註解於class,忽略屬性
@JsonIgnore // 忽略所註解的屬性
@JsonFormat(pattern="yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") // 指定格式
@JsonUnwrapped // 取消巢狀結構
Bean
@Bean
@Getter // 自動生成 getter
@Setter // 自動生成 setter
@ToString // 自動生成 toString
測試
@Test // 聲明為測試方法
@Transactional // 測試方法中的資料不會寫入資料庫
@WithMockUser(username="Sandy", authorities="reader") // 模擬用戶與權限