quarkusを使う(ExceptionMapper編)

こんばんは

お久しぶりです。エキサイト株式会社 中尾です。

最近は趣味でQuarkusを使っています。 本記事ではQuarkusの例外処理について紹介します。

Red Hatの皆様、コメントください、DM待っています。

今回はエラーのハンドリングということで、exceptionのcustom handlerを作っていきます。

ExceptionMapperを継承して、BadRequestExceptionを発生させます。

package org.my.hobby.controller.exception.handler;

import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

@Provider
public class BadRequestExceptionHandler implements ExceptionMapper<BadRequestException> {

    @Override
    public Response toResponse(BadRequestException e) {
        return Response.status(Response.Status.BAD_REQUEST).
                entity(new ErrorMessage(e.getMessage())).build();
    }
}
package org.my.hobby.controller.exception.handler;

import java.io.Serializable;

public class BadRequestException extends
        RuntimeException implements Serializable {

    private static final long serialVersionUID = 1L;

    public BadRequestException() {
    }

    public BadRequestException(String message) {
        super(message);
    }

    public BadRequestException(String message, Throwable cause) {
        super(message, cause);
    }

    public BadRequestException(Throwable cause) {
        super(cause);
    }

    public BadRequestException(String message, Throwable cause,
                               boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}
package org.my.hobby.controller.exception.handler;

public record ErrorMessage(
        String message
) {
}

これでcontroller内でthrow new BadRequestException("invalid emai");などで、ErrorMessageを返すことができます。

SpringBootのプラグインを入れたらControllerAdviceも使えますが、使いません(不自由を楽しむのもまた一興)

次回はこっちでやっていきます。

https://quarkus.io/guides/resteasy-reactive