SpringMVC学习--POST请求中文乱码问题
2016-12-28 15:07
393 查看
在之前我们没有用基于注解的控制器时,controller是这么写的:
request以UTF-8编码接受请求:
使用注解控制器之后:
SpringMVC会将请求参数直接填充到ProductForm对象中去,不再需要我们手动都取出再new对象。但是这样直接填入就会有中文乱码问题,如下:
那我们怎么解决这个问题?能不能像之前一样,加上request.setCharacterEncoding(“UTF-8”);
答案是,不行!
为什么呢?
那有什么办法可以在调用controller之前设置编码呢?
思路就是这样,其实SpringMVC已经给我内置了这样的编码fiter,在org.springframework.web.filter.CharacterEncodingFilter中,我们只需要在web.xml中加入即可:
public class SaveProductController implements Controller{ private static final Log logger= LogFactory.getLog(SaveProductController.class); @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { logger.info("SaveProductController 被调用!"); //解决中文乱码 request.setCharacterEncoding("UTF-8"); ProductForm productForm=new ProductForm(); productForm.setName(request.getParameter("name")); productForm.setDescription(request.getParameter("description")); productForm.setPrice(request.getParameter("price")); Product product=new Product(); product.setName(productForm.getName()); product.setDescription(productForm.getDescription()); product.setPrice(Float.parseFloat(productForm.getPrice())); return new ModelAndView("ProductDetails","product",product); } }
request以UTF-8编码接受请求:
request.setCharacterEncoding("UTF-8");
使用注解控制器之后:
@RequestMapping(value = "/save_product",method = RequestMethod.POST) public String saveProduct(ProductForm productForm, RedirectAttributes redirectAttributes){ logger.info("saveProduct 调用"); //无需再从request中取出表单数据再ProductForm实例化 Product product=new Product(); product.setName(productForm.getName()); product.setDescription(productForm.getDescription()); product.setPrice(Float.parseFloat(pro 4000 ductForm.getPrice())); //add Product saveProduct=productService.add(product); //重定向传递参数 redirectAttributes.addFlashAttribute("message", "商品成功保存!"); return "redirect:/product_view/"+saveProduct.getId(); }
SpringMVC会将请求参数直接填充到ProductForm对象中去,不再需要我们手动都取出再new对象。但是这样直接填入就会有中文乱码问题,如下:
那我们怎么解决这个问题?能不能像之前一样,加上request.setCharacterEncoding(“UTF-8”);
答案是,不行!
为什么呢?
原因是,SpringMVC将表单中的参数取出填充到ProductForm中,是在调用controller之前,如果要使用中文,则需要在取出来的时候就设置好编码(utf-8),取出之后设置就没用了。
那有什么办法可以在调用controller之前设置编码呢?
其实controller的本质也是一个servlet,要解决这个问题也就是怎么在servlet执行之前解决编码问题。显而易见,我们都想到了fiter(过滤器)。 使用一个Filter取出request设置需要的编码,然后配置在web.xml中OK啦。
思路就是这样,其实SpringMVC已经给我内置了这样的编码fiter,在org.springframework.web.filter.CharacterEncodingFilter中,我们只需要在web.xml中加入即可:
<filter> <filter-name>CharacterEncodingFilter</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> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
相关文章推荐
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
- springmvc 处理http get/post请求中文乱码的问题
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
- SpringMVC-Post/Get请求中文乱码问题
- SpringMvc发送post请求中文乱码问题
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
- SpringMVC学习 解决GET请求时中文乱码的问题
- Jmeter学习中遇到问题(一):请求参数有中文,post传过去显示乱码
- SpringMVC学习系列 解决GET请求时中文乱码的问题
- 解决问题:在使用springmvc的web.xml配置乱码拦截器之后接收的get或者post请求中文还是乱码
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
- 解决SpringMvc限定请求方法POST推送数据出现的中文乱码问题