(Java, SpringBoot)出会ったアノテーションまとめ
SpringBootを使ってきて出会ったアノテーションを羅列。
分類は適当。
アノテーション | 付与先 | メモ |
---|---|---|
@Controller | このクラスがコントローラであることを示す | @Controlelr public class HelloController {} |
@RequestMapping | HTTPリクエストを受け付ける。http://localhost:8080/hello⇒ | @RequestMapping("/hello") public String hello() { return "Hello"; } |
@GetMapping | HTTPのGETメソッドを受け付ける | @GetMapping("/hello") public String hello() { return "Hello"; } |
@PostMapping | HTTPのPOSTメソッドを受け付ける | @PostMapping("/confirm") public String confirm() { return "Confirm"; } |
@RequestParam | リクエストの値を取得する | public String greet(@RequestParam("message") String message, Model model) |
@Service | このクラスがビジネスロジックであることを示す | @Service public class UserDataService {} |
@Repository | リポジトリであることを示す | @Repository public interface CommentRepository {} |
@Data | Lombok。GetterやSetterなどの定型コードを自動生成する | @Data public class User {} |
@Getter | Lombok。Getterの定型コードを自動生成する | @Getter public class User {} |
@Setter | Lombok。Setterの定型コードを自動生成する | @Setter public class User {} |
@ModelAttribute | フォーム情報を受け取る(?)。データバインディング | @PostMapping public confirm(@ModelAttribute User user) {} |
@Entity | エンティティデータであることを示す | @Entity public class Book {} |
@Id | エンティティの主キー | @Id @GeneratedValue private Long id; |
@GeneratedValue | 主キーの値を自動採番する。@Id @GeneratedValue private Long id; |
|
@Component | このクラスがコンポーネントであることを示す。 | @Component public class DataLoader {} |
@Scope | Beanのスコープを指定することができる | @Scope("singleton") @Scope("prototype") @Scope("request") @Scope("session") @Scope("websocket") @Scope("request")は@RequestScope、@Scope("session")は@SessionScope ※指定が無い場合singleton |
インジェクション
アノテーション | 内容 | メモ |
---|---|---|
@Autowired | Springがオブジェクトを管理・インジェクションをしてくれる。 | // フィールドインジェクション @Autowired private CommentRepository repository; // コンストラクタインジェクション private final CommentRepository repository; // finalにできる public CommentController(CommentRepository repository) { this.repository = repository; } |
@RequiredArgsConstructor | コンストラクタを自動生成する。Lombokの@RequiredArgsConstructorを使うとコンストラクタ・インジェクションを省略できる |
JPA
アノテーション | 内容 | メモ |
---|---|---|
@GeneratedValue | DBのidentity列を使用してキーを自動採番する。 | @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; |
@ManyToOne | 多対一のテーブルである | // departmentテーブルの課が1に対して複数の従業員 public class Employee { @ManyToOne private Department department; } |
@OneToMany | 一対多のテーブルである | public class Department { @OneToMany(mappedBy = "department") private List |
@JoinColumn | 結合カラムを指定できる | public class Employee { @ManyToOne @JoinColumn(name = "sample_id") Department department; } |
@Query | JPQL(SQLライク)を用いてテーブル(@Entity)を操作する | @Query("SELECT e FROM employees e WHERE e.name LIKE :name") Collection |
@Table | DBのテーブル名を設定する | @Table(name = "employees") @Entity public class Employee {} |
ロギング
アノテーション | 内容 | メモ |
---|---|---|
@Slf4j | Lombokのロギングアノテーション | @Slf4j public class StringIocApplication {} |
バリデーション(Bean Validation)
アノテーション | 内容 | メモ |
---|---|---|
@Validated | 入力チェックを行う。BindingResultに検証結果が入る | @PostMapping("/confirm") public String confirm(@Validated @ModelAttribute User user, BindingResult result) |
@NumberFormat | 指定パターンの文字列を数値に型変換する | @NumberFormat(pattern="#,###") private BigDecimal price; |
@DateTimeFormat | yyyy-MM-dd形式の文字列を日付に型変換する | @DateTimeFormat(pattern="yyyy-MM-dd") private LocalDate date; |
@NotBlank | 文字列が、nullか空文字、空白(半角)ではないか検証する | @NotBlank String name; |
@NotEmpty | 文字列がnullか空文字でないか検証する(Collectionもサポート) | @NotEmpty String name; |
@NotNull | nullでないかを検証する | @NotNull String id; |
@Size | 文字列の長さが指定の範囲内かを検証する(Collectionもサポート) | @Size(min=4, max=100) String name; |
文字列が有効なメールアドレスかを検証する | @Email String email |
|
@Min | 指定の値以上かを検証する。 | @Min(1) Integer age; |
@Max | 指定の値以下かを検証する。 | @Max(120) Integer age; |
@Pattern | 文字列が正規表現と一致するかを検証する | @Pattern(regexp="[0-9]+") String phoneNumber; |
@AssertFalse | Falseであるか検証する | @AssertFalse Boolean isActive; |
@AssertTrue | Trueであるか検証する | @AssertTrue Boolean isActive; |
@Future | 日付が未来かどうかを検証する | @Future Date eventDate; |
@Past | 日付が過去かどうかを検証する | @Past Date eventDate; |
@Range | 数値が指定の範囲内か検証する | @Range(min=1, max=120) Integer age; |
@URL | 文字列が有効なURLか検証する | @URL String url; |
@CreditCardNumber | 文字列が有効なクレジットカード番号であるかを検証する | @CreditCardNumber String cardNumber; |
@ISBN | 文字列がISBNであるか検証する | @ISBN String isbn; |
@Length | 文字列のが長さが指定の範囲内か検証する。@Sizeを使用するのを推奨。 | @Length(min=4, max=100) String name; |