
@Context @Suspended アノテーションの非推奨化
@Context は @Context UriInfo info や @Context HttpHeaders headers のようにランタイム情報をインジェクションするものです。
@Suspended は、サーバー側で非同期処理を行うためのアノテーションで以下のように使用します。
@GET public void async(@Suspended AsyncResponse asyncResponse) { executor.execute(() -> { try { asyncResponse.resume(heavyProcess()); } catch (Exception e) { asyncResponse.resume(e); } }); }
Jakarta RESTful Web Services 5.0 では、@Context と @Suspended アノテーションは CDI への統合のため非推奨化されます。
ただ、CDI への完全な統合は 6.0 で行われることになりそうなので、@Context と @Suspended は旧来通り使用することができます。
Jakarta RESTful Web Services 5.0 段階では、@Context のインジェクションは以下のような書き方ができます。
@GET public String listQueryParamNames(@Context UriInfo info) { // ... }
@GET public String listQueryParamNames(UriInfo info) { // ... }
@Inject UriInfo info; @GET public String listQueryParamNames() { // ... }
@Suspended についても @Suspended を削除するだけで良いです。
@GET public void async(AsyncResponse asyncResponse) { // ... }
Jakarta RESTful Web Services 6.0 では、今まではアノテーションが不要であったエンティティボディに @EntityParam(名称未定) が必要となり、
この段階でフルCDI対応が完了する予定のようです。
@POST @Consumes(MediaType.APPLICATION_JSON) public void createUser(@EntityParam User user) { // ... }
Java Records のサポート
レコードクラスのサポートが追加される予定です。
以下のようなレコードクラスを、
record PersonForm(String name, int age) {}
以下のように利用できるようになります。
@POST @Produces(MediaType.TEXT_HTML) public Response post(@BeanParam PersonForm form) { //... }
@PathParam のデフォルト値
以下のように @PathParam では、パラメータ名の指定が必須でした。
public String hello(@PathParam("name") String name, @PathParam("surname") String surname) { // ... }
Jakarta RESTful Web Services 5.0 では、バイトコード内でメソッドのパラメータ名保持が有効な場合、 以下のようにパラメータ名が省略可能となります。
public String hello(@PathParam String name, @PathParam String surname) { // ... }