我想从前端网站上的用户输入获取消息,发布的表单应该用“UTF-8”编码,但是,spring mvc控制器获取用“iso-8859-1”编码的对象,我必须将所有字符串分别转换为“UTF-8”。这真的很丑,不方便。
**Request Headers**
POST /feedback HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www-form-urlencoded
Referer: http://localhost:8080/feedback
**Form Data**
(Please ignore)
**Response Headers**
Content-Language:zh-CN
Content-Type:text/html;charset=UTF-8
我的控制器是:
@RequestMapping(value = "/feedback", method = RequestMethod.POST, produces = "text/plain;charset=UTF-8")
public ModelAndView quizStart(@ModelAttribute("userComments") UserComments userComments) {
System.out.println(userComments.toString()); //*output 1*
try {
System.out.println(String.format("User comments: %s", new String(userComments.toString().getBytes("iso-8859-1"), "UTF-8"))); //*output 2*
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return new ModelAndView("user_feedback");
}
输出1不是预期的,因为它用“iso-8859-1”编码,输出2是正确的,但几乎不可能将所有对象逐个转换为“UTF-8”。
除了逐个转换消息之外,还有人可以提供更好的解决方案吗?
非常感谢。
答案 0 :(得分:2)
我定义了编码过滤器,请参考this document。它有效。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.CharacterEncodingFilter;
@Configuration
public class FiltersConfig {
@Bean
public CharacterEncodingFilter characterEncodingFilter() {
final CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
characterEncodingFilter.setForceEncoding(true);
return characterEncodingFilter;
}
}
答案 1 :(得分:0)
如果您需要在UTF-8和ISO-8859-1之间转换字符串,请检查我的答案here。