メモ:JAX-RS(RESTEasy) の Multipart の Charset 指定方法
ここで紹介されています。
Java - JBossのRESTEasyにおけるMultipart Requestの文字化け対策 - Qiita
ですが、PreProcessInterceptor は @Deprecated になっていました。
しかも @Provider 付けると Eclipse でこんな感じのエラーが。
The Provider must implement at least one of the following interfaces: javax.ws.rs.ext.MessageBodyReader, javax.ws.rs.ext.MessageBodyWriter, javax.ws.rs.ext.ExceptionMapper, javax.ws.rs.ext.ReaderInterceptor, javax.ws.rs.ext.WriterInterceptor, javax.ws.rs.container.ContainerRequestFilter, javax.ws.rs.container.ContainerResponseFilter or javax.ws.rs.ext.ContextResolver.
このままビルドしてデプロイしたら意図した通りには動くんですが嫌ですよね。
ちなみに最新のドキュメント 3.0.9 でも PreProcessInterceptor のままです。
Chapter 23. Multipart Providers
というわけで代替手段を探します。
RESTEasy のドキュメントには Filter と Interceptor について書いてる箇所があります。
Chapter 33. Filters and Interceptors
ここで紹介されている ContainerRequestFilter を使って代替してみます。
import java.io.IOException; import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerRequestFilter; import javax.ws.rs.ext.Provider; import org.jboss.resteasy.plugins.providers.multipart.InputPart; @Provider @SuppressWarnings("all") public class ContentTypeSetterContainerRequestFilter implements ContainerRequestFilter { public void filter(final ContainerRequestContext context) throws IOException { context.setProperty(InputPart.DEFAULT_CHARSET_PROPERTY, "UTF-8"); } }
こんな感じですかね。
PreProcessInterceptor が廃止になったのは、JAX-RS 自体に Filter/Interceptor が入ったからかな?