而springboot在编解码方面默认是UTF-8,也就是解析字符串时会按UTF-8解析。
如果不加处理,就会导致乱码。例如设备传过来一个人名 Name=张三,后端接收处理后就会变成 Name=浣犳槸
这里分两种情况处理
情况一:可以全局设置
如果后端所有请求都需要用GB2312解码字符串,则可以在配置文件里配置
情况二:只有某些路径需要用GB2312解码
则设置过滤器进行配置
@RequestMapping(value = "/login", method = RequestMethod.GET)public ModelAndView myMethod(HttpServletRequest request,
HttpServletResponse response,
//@RequestParam("username")String username, @RequestParam("password")String password
String username,String password,//如果和前台的一样一样简写成这样
ModelMap modelMap) throws Exception {
username = new String(username.getBytes("iso8859-1"),"UTF-8")//编码问题 (服务器一帮都是iso的)
System.out.println(username+":"+password)
modelMap.put("loginUser", username)
modelMap.put("msg", "I'm in session")
return new ModelAndView("/view/hello", modelMap)
}
这里是一个方法,springMVC中参数可以直接现在方法的参数列表中,如果是对象属性的话也可以直接使用对象例如(User user,...)
刚才的方法对应的前台:
<form action="login">
username:
<input name="username" />
<br>
password:
<input name="password" type="password" />
<br>
<input type="submit" value="登入" />
</form>
追问
我的form表单中有10多个字段 而且和数据库都是一一对应的,而且以后说不定还会增加,不想一个字段一个字段的传,想直接将整个form表单的所有字段全传过去 该怎么写啊
回答
这些数据都是一个类里面的吧。就只要吧原来的string username,string password ...
改成哪个类就行了,会自动封装进去的例如:方法的参数User user,HttpRequest requrst,..
使用的时候只要user.getUsername()
类似下面的:
@RequestMapping("/addUser")
public String addUser(User user,HttpServletRequest request){
userManager.addUser(user)
return "redirect:/user/getAllUser"
}
可以编写一个Filterpublic class EncodingFilter implements Filter {
/** 编码 */
String encoding = null
/** 销毁编码 */
public void destroy() {
this.encoding = null
}
/**
* 执行过滤链,对请求和相应设置编码
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if (encoding != null) {
// 对请求进行编码设置
request.setCharacterEncoding(encoding)
response.setCharacterEncoding(encoding)
}
// 将处理权转交给下一个处理器
chain.doFilter(request, response)
}
/**
* 初始化编码,从配置文件中获取编码的值
*/
public void init(FilterConfig filterConfig) throws ServletException {
this.encoding = filterConfig.getInitParameter("encoding")
}
}
需要再Web.xm中注册拦截器
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.sato.filter.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)