… @POST public Book add(@Valid Book book) throws DuplicateException { … @PUT public Book update(@Valid @ConvertGroup(to = Update.class) Book book) throws NotFoundException { … @DELETE @Path("/{id}") public void delete(@NotNull @PathParam("id") int id) throws NotFoundException { … } 普段はつけませんが分かりように例示のため実行時例外をthrows宣言してます MicroProfileの例ですがSpringも同様になっています Controllerから例外が送出されたら例外に対応するレスポンスを一元的に返したい(ですよね!)
… @GetMapping("/{id}") public Book get(@NotNull @PathVariable int id) {… @GetMapping("/author") public List<Book> findByAuthorStartingWith(@NotBlank @Size(max= 10) … @PostMapping public Book add(@Validated @RequestBody Book book) … { @PutMapping public Book update(@Validated(Update.class) @RequestBody Book book) … public class BookController {// @Producesと@Consumeは省略 … @GET @Path("/{id}") public Book get(@NotNull @PathParam("id") int id) {… @GET @Path("/author") public List<Book> findByAuthorStartingWith(@NotBlank @Size(max= 10) … @POST public Book add(@Valid Book book) throws … {… @PUT public Book update(@Valid @ConvertGroup(to = Update.class) Book book) … {… public class Book { @NotNull(groups = Update.class) private Integer id; @NotBlank @Size(min = 1, max = 20) private String title; @Size(max = 20) private String author; validate • どちらもBeanValidationと統合されチェックアノテーションをつける だけでリクエスト受信時にチェックしてくれる • SpringはMessageSourceResolvableを使ってリッチなメッセージ を構築できるがUIがないRESTでは使いどころはない • エンティティオブジェクトに対してはMicroProfileは@Valid (BeanValidation標準)を使うがSpringでは独自の@Validatedを使う • group指定する場合、MicroProfileは@ConvertGroup(BeanValidation標 準)を使うがSpringでは@Validatedの属性で指定する