[解決済み] Spring MVCでレスポンスのcontent-typeを設定する人(@ResponseBody)
2022-06-11 15:57:08
質問
私はアノテーション駆動のSpring MVCのJava Webアプリケーションでjetty Webサーバー(現在maven jettyプラグイン)で実行されている持っています。
私は、1つのコントローラメソッドが文字列のヘルプテキストだけを返す、いくつかのAJAXサポートを行おうとしています。リソースはUTF-8エンコーディングで、文字列もそうですが、サーバーからの私の応答は次のようになります。
content-encoding: text/plain;charset=ISO-8859-1
を送信しても、ブラウザが
Accept-Charset windows-1250,utf-8;q=0.7,*;q=0.7
なぜかspringのデフォルト設定を使っています
このBeanを設定に追加するヒントを見つけたのですが、エンコーディングをサポートしていないと書いてあり、代わりにデフォルトのものが使われているので、使われていないだけなのだと思います。
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" value="text/plain;charset=UTF-8" />
</bean>
私のコントローラのコードは次のとおりです (このレスポンスタイプの変更は私には機能しないことに注意してください)。
@RequestMapping(value = "ajax/gethelp")
public @ResponseBody String handleGetHelp(Locale loc, String code, HttpServletResponse response) {
log.debug("Getting help for code: " + code);
response.setContentType("text/plain;charset=UTF-8");
String help = messageSource.getMessage(code, null, loc);
log.debug("Help is: " + help);
return help;
}
どのように解決するのですか?
シンプルな宣言で
StringHttpMessageConverter
ビーンに注入するだけでは十分ではありません。
AnnotationMethodHandlerAdapter
:
<bean class = "org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<array>
<bean class = "org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" value = "text/plain;charset=UTF-8" />
</bean>
</array>
</property>
</bean>
しかし,この方法では,すべての
HttpMessageConverter
を再定義する必要があり、また
<mvc:annotation-driven />
.
そこで、おそらく最も便利でありながら醜い方法は
AnnotationMethodHandlerAdapter
で
BeanPostProcessor
:
public class EncodingPostProcessor implements BeanPostProcessor {
public Object postProcessBeforeInitialization(Object bean, String name)
throws BeansException {
if (bean instanceof AnnotationMethodHandlerAdapter) {
HttpMessageConverter<?>[] convs = ((AnnotationMethodHandlerAdapter) bean).getMessageConverters();
for (HttpMessageConverter<?> conv: convs) {
if (conv instanceof StringHttpMessageConverter) {
((StringHttpMessageConverter) conv).setSupportedMediaTypes(
Arrays.asList(new MediaType("text", "html",
Charset.forName("UTF-8"))));
}
}
}
return bean;
}
public Object postProcessAfterInitialization(Object bean, String name)
throws BeansException {
return bean;
}
}
-
<bean class = "EncodingPostProcessor " />
関連
-
スタイルシートとして解釈されるリソースが、MIMEタイプtext/htmlで転送される。
-
Spring Boot による HTTPS アクセスの設定
-
Javaクラスローダーにソースコードから潜り込む
-
this()の呼び出しはコンストラクタ本体の最初の文でなければならない 例外解決と原因分析
-
java Mail send email smtp is not authenticated by TLS encryption solution.
-
Java コンパイルエラー - スレッド "main" で例外 java.lang.Error: 未解決のコンパイル問題です。
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
あるコードに出会いましたが、何に使うのか理解できません。 List<String> list = new ArrayList<String>() { { a
-
[解決済み] Spring MVCの@ResponseBodyメソッドがStringを返すときにHTTP 400エラーで応答するにはどうすればよいですか?
-
[解決済み] Spring MVCの@ModelAttributeとは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スタイルシートとして解釈されるリソースが、MIMEタイプtext/htmlで転送される。
-
Java Exceptionが発生しました エラー解決
-
JavaMailのメール送信が失敗するケースとその説明の分析
-
JDKの設定時にjava.dllが見つからない、java SE Runtime Environmentが見つからない問題が発生しました。
-
サーブレットクラスのインスタンス化エラーの解決法
-
リソースの読み込みに失敗しました。サーバーはステータス500(内部サーバーエラー)で応答しました。
-
スレッド "main" で例外発生 java.net.BindException: アドレスは既に使用中です。NET_Bind
-
JSPで「リストが型解決できない!」の解決方法
-
このラインで複数のマーカーを解決する方法
-
テストが見つかりませんでした