java accept charset_springmvc中post请求中文乱码问题

StringHttpMessageConverter源码:

/*

* Copyright 2002-2016 the original author or authors.

*

* Licensed under the Apache License, Version 2.0 (the "License");

* you may not use this file except in compliance with the License.

* You may obtain a copy of the License at

*

* http://www.apache.org/licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing, software

* distributed under the License is distributed on an "AS IS" BASIS,

* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and

* limitations under the License.

*/

package org.springframework.http.converter;

import java.io.IOException;

import java.io.UnsupportedEncodingException;

import java.nio.charset.Charset;

import java.util.ArrayList;

import java.util.List;

import org.springframework.http.HttpInputMessage;

import org.springframework.http.HttpOutputMessage;

import org.springframework.http.MediaType;

import org.springframework.util.StreamUtils;

/**

* Implementation of {@link HttpMessageConverter} that can read and write strings.

*

*

By default, this converter supports all media types ({@code */*}),

* and writes with a {@code Content-Type} of {@code text/plain}. This can be overridden

* by setting the {@link #setSupportedMediaTypes supportedMediaTypes} property.

*

* @author Arjen Poutsma

* @author Juergen Hoeller

* @since 3.0

*/

public class StringHttpMessageConverter extends AbstractHttpMessageConverter {

public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");

private final List availableCharsets;

private boolean writeAcceptCharset = true;

/**

* A default constructor that uses {@code "ISO-8859-1"} as the default charset.

* @see #StringHttpMessageConverter(Charset)

*/

public StringHttpMessageConverter() {

this(DEFAULT_CHARSET);

}

/**

* A constructor accepting a default charset to use if the requested content

* type does not specify one.

*/

public StringHttpMessageConverter(Charset defaultCharset) {

super(defaultCharset, MediaType.TEXT_PLAIN, MediaType.ALL);

this.availableCharsets = new ArrayList(Charset.availableCharsets().values());

}

/**

* Indicates whether the {@code Accept-Charset} should be written to any outgoing request.

*

Default is {@code true}.

*/

public void setWriteAcceptCharset(boolean writeAcceptCharset) {

this.writeAcceptCharset = writeAcceptCharset;

}

@Override

public boolean supports(Class> clazz) {

return String.class == clazz;

}

@Override

protected String readInternal(Class extends String> clazz, HttpInputMessage inputMessage) throws IOException {

Charset charset = getContentTypeCharset(inputMessage.getHeaders().getContentType());

return StreamUtils.copyToString(inputMessage.getBody(), charset);

}

@Override

protected Long getContentLength(String str, MediaType contentType) {

Charset charset = getContentTypeCharset(contentType);

try {

return (long) str.getBytes(charset.name()).length;

}

catch (UnsupportedEncodingException ex) {

// should not occur

throw new IllegalStateException(ex);

}

}

@Override

protected void writeInternal(String str, HttpOutputMessage outputMessage) throws IOException {

if (this.writeAcceptCharset) {

outputMessage.getHeaders().setAcceptCharset(getAcceptedCharsets());

}

Charset charset = getContentTypeCharset(outputMessage.getHeaders().getContentType());

StreamUtils.copy(str, charset, outputMessage.getBody());

}

/**

* Return the list of supported {@link Charset}s.

*

By default, returns {@link Charset#availableCharsets()}.

* Can be overridden in subclasses.

* @return the list of accepted charsets

*/

protected List getAcceptedCharsets() {

return this.availableCharsets;

}

private Charset getContentTypeCharset(MediaType contentType) {

if (contentType != null && contentType.getCharset() != null) {

return contentType.getCharset();

}

else {

return getDefaultCharset();

}

}

}

可以看到默认的编码是ISO-8859-1。所以在spring-mvc.xml中把编码改成UTF-8就好了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值