springboot 多种编码处理

springboot 多种编码处理,第1张

在开发中控门禁  xFace630/M 的协议时,协议中有这样一项说明

而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"

}

可以编写一个Filter

public 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>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11220338.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存