Spring MVC Beanを持っているので、エンコードUTF-8を設定してトルコ語の文字を返したいです。しかし、私の文字列は「şŞğĞİıçÇöÖüÜ」ですが、「??????çÇöÖüÜ」として返されます。また、Internet Explorerページである応答ページを見ると、エンコードはUTF-8ではなく西ヨーロッパのisoです。
コードは次のとおりです。
@RequestMapping(method=RequestMethod.GET,value="/GetMyList")
public @ResponseBody String getMyList(HttpServletRequest request, HttpServletResponse response) throws CryptoException{
String contentType= "text/html;charset=UTF-8";
response.setContentType(contentType);
try {
request.setCharacterEncoding("utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
response.setCharacterEncoding("utf-8");
String str="şŞğĞİıçÇöÖüÜ";
return str;
}
私はそれを理解しました、あなたはリクエストマッピングに追加することができます= "text/plain; charset = UTF-8"
@RequestMapping(value = "/rest/create/document", produces = "text/plain;charset=UTF-8")
@ResponseBody
public void create(Document document, HttpServletRespone respone) throws UnsupportedEncodingException {
Document newDocument = DocumentService.create(Document);
return jsonSerializer.serialize(newDocument);
}
ディスパッチャサーブレットコンテキストxmlで、viewResolver Beanにプロパティ"<property name="contentType" value="text/html;charset=UTF-8" />"
を追加する必要があります。ビューにはfreemarkerを使用しています。
次のようになります。
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
...
<property name="contentType" value="text/html;charset=UTF-8" />
...
</bean>
JSON文字列を独自にUTF-8に変換します。
@RequestMapping(value = "/example.json", method = RequestMethod.GET)
@ResponseBody
public byte[] example() throws Exception {
return "{ 'text': 'äöüß' } ".getBytes("UTF-8");
}
Beanにも追加します。
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<array>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg index="0" name="defaultCharset" value="UTF-8"/>
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
<value>application/x-www-form-urlencoded;charset=UTF-8</value>
</list>
</property>
</bean></bean>
@ExceptionHandlerの場合:
enter code<bean class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver">
<property name="messageConverters">
<array>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg index="0" name="defaultCharset" value="UTF-8"/>
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
<value>application/x-www-form-urlencoded;charset=UTF-8</value>
</list>
</property>
</bean>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
<value>application/x-www-form-urlencoded;charset=UTF-8</value>
</list>
</property>
</bean>
</array>
</property>
</bean>
<mvc:annotation-driven/>
を使用する場合は、Beanの後でなければなりません。
同様の質問がいくつかあります: Spring MVCレスポンスエンコーディングの問題 、 Jsonのことを行う@ResponseBodyを持つカスタムHttpMessageConverter 。
しかし、私の簡単な解決策:
@RequestMapping(method=RequestMethod.GET,value="/GetMyList")
public ModelAndView getMyList(){
String test = "čćžđš";
...
ModelAndView mav = new ModelAndView("html_utf8");
mav.addObject("responseBody", test);
}
およびビューhtml_utf8.jsp
<%@ page language="Java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>${responseBody}
追加のクラスと構成はありません。
また、他のコンテンツタイプ用に別のビュー(json_utf8など)を作成することもできます。
È、à、ùなどの特殊文字を送信しようとすると、Jsp Postページに「£」、「Ä」、「Æ」などの多くの文字が表示される場合があります。ケースの99%でこの問題を解決するには、web.xmlで次のコードをファイルの先頭に移動します。
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
完全な例については、こちらを参照してください: https://lentux-informatica.com/spring-mvc-utf-8-encoding-problem-solved/
生成された戻り値の型を最初のGET requestMethodに推測することで、この問題を解決しました。ここで重要な部分は
produces="application/json;charset=UTF-8
したがって、誰もが/ account/**をどのように使用するか、Springはapplication/json; charset = UTF-8コンテンツタイプを返します。
@Controller
@Scope("session")
@RequestMapping(value={"/account"}, method = RequestMethod.GET,produces="application/json;charset=UTF-8")
public class AccountController {
protected final Log logger = LogFactory.getLog(getClass());
....//More parameters and method here...
@RequestMapping(value={"/getLast"}, method = RequestMethod.GET)
public @ResponseBody String getUltimo(HttpServletResponse response) throws JsonGenerationException, JsonMappingException, IOException{
ObjectWriter writer = new ObjectMapper().writer().withDefaultPrettyPrinter();
try {
Account account = accountDao.getLast();
return writer.writeValueAsString(account);
}
catch (Exception e) {
return errorHandler(e, response, writer);
}
}
そのため、コントローラーのメソッドごとに設定する必要はなく、クラス全体に対して設定できます。特定のメソッドをより詳細に制御する必要がある場合は、プロデュースリターンコンテンツタイプを推測するだけです。
Spring MVCバージョン5を使用している場合は、@GetMapping
注釈。次に、コンテンツタイプをJSONに設定し、エンコードタイプをUTF-8に設定する例を示します。
@GetMapping(value="/rest/events", produces = "application/json; charset=UTF-8")
@GetMappingアノテーションの詳細はこちら: