1.springmvc 3.2以上的版本解决乱码的方法:
第一步:在配置中加入:
1 <mvc:annotation-driven> 2 <mvc:message-converters register-defaults="true"> 3 <bean class="org.springframework.http.converter.StringHttpMessageConverter"> 4 <constructor-arg value="UTF-8" /> 5 </bean> 6 <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 7 <property name="objectMapper"> 8 <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"> 9 <property name="failOnEmptyBeans" value="false" /> 10 </bean> 11 </property> 12 </bean> 13 </mvc:message-converters> 14 </mvc:annotation-driven>
第二步:需要的加入的jackson jar如下:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-jaxb-annotations</artifactId> <version>2.1.0</version> </dependency>
2.springmvc 3.1解决中文乱码的方法:
第一步:在配置文件中加入以下代码:
1 <mvc:annotation-driven> 2 3 <mvc:message-converters register-defaults="true"> 4 5 <bean class="com.util.spring.UTF8StringHttpMessageConverter"/> 6 7 </mvc:message-converters> 8 9 </mvc:annotation-driven>
第二步:自定义一个编码转换类:
1 public class UTF8StringHttpMessageConverter extends 2 AbstractHttpMessageConverter<String> { 3 4 public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); 5 private final List<Charset> availableCharsets; 6 7 public UTF8StringHttpMessageConverter() { 8 this(DEFAULT_CHARSET); 9 } 10 11 public UTF8StringHttpMessageConverter(Charset defaultCharset) { 12 super(new MediaType("text", "plain", defaultCharset), MediaType.ALL); 13 this.availableCharsets = new ArrayList<Charset>(Charset .availableCharsets().values()); 14 } 15 16 @Override 17 protected boolean supports(Class<?> clazz) { 18 return String.class.equals(clazz); 19 } 20 21 @Override 22 protected String readInternal(Class<? extends String> clazz, 23 HttpInputMessage inputMessage) throws IOException, 24 HttpMessageNotReadableException { 25 MediaType contentType = inputMessage.getHeaders().getContentType(); 26 Charset charset = contentType.getCharSet() != null ? contentType.getCharSet() : DEFAULT_CHARSET; 27 return FileCopyUtils.copyToString(new InputStreamReader(inputMessage .getBody(), charset)); 28 } 29 30 @Override 31 protected void writeInternal(String t, HttpOutputMessage outputMessage) 32 throws IOException, HttpMessageNotWritableException { 33 MediaType contentType = outputMessage.getHeaders().getContentType(); 34 Charset charset = contentType.getCharSet() != null ? contentType .getCharSet() : DEFAULT_CHARSET; 35 FileCopyUtils.copy(t, new OutputStreamWriter(outputMessage.getBody(), charset)); 36 } 37 38 protected List<Charset> getAcceptedCharsets() { 39 return this.availableCharsets; 40 } 41 42 @Override 43 protected Long getContentLength(String s, MediaType contentType) { 44 if (contentType != null && contentType.getCharSet() != null) { 45 Charset charset = contentType.getCharSet(); 46 try { 47 return (long) s.getBytes(charset.name()).length; 48 } catch (UnsupportedEncodingException ex) { 49 throw new InternalError(ex.getMessage()); 50 } 51 } else { 52 return null; 53 } 54 } 55 }
第三步:加入需要的jackson包:
<dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.8.8</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.8.8</version> </dependency>