javascript
springmvc 全局编码_SpringMVC-设置UTF-8编码
SpringMVC - 設(shè)置UTF-8編碼
參考
全局修改輸出為UTF-8編碼
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">
annotation方法
由方法1, 我們可以看到一個起關(guān)鍵作用的類org.springframework.http.converter.StringHttpMessageConverter. 打開源碼可以發(fā)現(xiàn):
public class StringHttpMessageConverter extends AbstractHttpMessageConverter {
// 省略 ....
public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");
private final List availableCharsets;
private boolean writeAcceptCharset = true;
public StringHttpMessageConverter(Charset defaultCharset) {
super(defaultCharset, MediaType.TEXT_PLAIN, MediaType.ALL);
this.availableCharsets = new ArrayList(Charset.availableCharsets().values());
}
// 省略 ....
}
可以看到, 默認編碼已經(jīng)被設(shè)定為了Charset.forName("ISO-8859-1"). 所以我們需要想辦法替換掉這個默認編碼. 方法1是通過xml加載了參數(shù)為UTF-8的StringHttpMessageConverter.
回到使用注解配置的Java代碼中:
因為配置SpringMVC的類, 需要繼承于WebMvcConfigurerAdapter, 我們可以看看里面有沒有相關(guān)方法可用.
public abstract class WebMvcConfigurerAdapter implements WebMvcConfigurer{...}
// 所以繼續(xù)看WebMvcConfigurer
public interface WebMvcConfigurer {
/**
* Configure the {@link HttpMessageConverter}s to use for reading or writing
* to the body of the request or response. If no converters are added, a
* default list of converters is registered.
*
Note that adding converters to the list, turns off
* default converter registration. To simply add a converter without impacting
* default registration, consider using the method
* {@link #extendMessageConverters(java.util.List)} instead.
* @param converters initially an empty list of converters
*/
void configureMessageConverters(List> converters);
/**
* A hook for extending or modifying the list of converters after it has been
* configured. This may be useful for example to allow default converters to
* be registered and then insert a custom converter through this method.
* @param converters the list of configured converters to extend.
* @since 4.1.3
*/
void extendMessageConverters(List> converters);
}
可以看到configureMessageConverters和extendMessageConverters兩個方法. 區(qū)別是前者會覆蓋掉默認的Converter, 而后者是擴展. 所以我們只需要在我們繼承于WebMvcConfigurerAdapter這個類的實現(xiàn)中覆蓋掉configureMessageConverters方法即可.
實現(xiàn)如下:
@Configuration
@EnableWebMvc
@ComponentScan("me.xiaofud.spring101.spittr.web")
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List> converters) {
StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(Charset.forName("UTF-8"));
stringHttpMessageConverter.setWriteAcceptCharset(false);
converters.add(stringHttpMessageConverter);
}
測試:
curl -I -X POST "http://localhost:8080/app/post/add"
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/plain;charset=UTF-8
Content-Length: 1338
Date: Sun, 12 Nov 2017 14:17:49 GMT
修改讀取參數(shù)時候的編碼
在web.xml中:
添加一個filter, 注冊org.springframework.web.filter.CharacterEncodingFilter.
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceEncoding
true
encodingFilter
/*
總結(jié)
以上是生活随笔為你收集整理的springmvc 全局编码_SpringMVC-设置UTF-8编码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 深度 视差 计算_Open
- 下一篇: hive 百分比_HIVE短期内再次突破