Spring Boot 常見的 Java 註解

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") // 模擬用戶與權限