このエラーの対応方法 org.im4java.core.CommandException: convert: no decode delegate for this image format

macでim4javaを使おうとしたらこんなエラーが

org.im4java.core.CommandException: convert: no decode delegate for this image format `' @ error/constitute.c/ReadImage/509.

どうやらコーデックに対応していないとのこと。
Linuxでの対応サイトでは、ソースからインストールすればいいとのことなので、brewでもそれをやる

$ brew remove imagemagick
$ brew install imagemagick --build-from-source

コンパイルに時間はかかるけど、これでいけます。

Spring Webfluxでのinterceptorメモ

Spring WebfluxはServlet使えないのでInterceptorとかないらしい。

Spring WebfluxではWebFilterを使うらしいので、メモ。


import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Configuration; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.WebFilter; import org.springframework.web.server.WebFilterChain; import org.springframework.web.server.WebSession; import reactor.core.publisher.Mono; @Configuration @Component @Slf4j public class SampleWebFilter implements WebFilter { @Override public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) { return chain.filter(exchange) .doOnRequest(value -> onRequest(exchange)) .doOnSuccess(done -> onSuccess()) .doOnSuccessOrError((success, error) -> onSuccessOrError()); } // controller前に呼ばれる private void onRequest(ServerWebExchange exchange) { log.info("{}", exchange); Mono<WebSession> session = exchange.getSession(); log.info("{}", session); SecurityContext context = SecurityContextHolder.getContext(); log.info("{}", context); log.info("onRequest"); } // exception発生しないときに呼ばれる private void onSuccess() { log.info("onSuccess"); } // exception発生しないときに呼ばれる private void onError() { log.info("onError"); } // 成功でもエラーでも呼ばれる private void onSuccessOrError() { log.info("onSuccessOrError"); } }

リクエストの中身もとれるのだが、thread localを使わないほうがいいらしいので、そこで処理したものはどうしたらいいんだろ…

doOnEach()doOnSuccessOrError() の違いはまだわかってないw

Spring5 Reactive(webflux)での@validのBindingResultの書き方かわってたのでメモ

もしかしたらwebflux関係ないかもだけど、Spring5 Reactive触ってたら、(@valid Form form , BindingResult bindingResult) こんなのが動かなくて調べたらメソッドとして独立するようになっていた

こんな感じ。
modelも引数にとれるので、viewを使ってるときは、これで対応可能。

@ExceptionHandler(WebExchangeBindException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public Object handleException(WebExchangeBindException errors, Model model){
        Response response = new Response();
        response.setErrors(errors.getBindingResult());
        return response;
    }