(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 employees;}
@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 searchByName(String name);
@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 文字列が有効なメールアドレスかを検証する @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;