Springmvc遇到的问题和解决方案(仅供自己参考,不喜勿喷)
来源:互联网 发布:三星手机数据恢复软件 编辑:程序博客网 时间:2024/06/03 01:50
HttpSession session = request.getSession();String token = (String) session.getAttribute(Constants.TOKEN);// 发送服务端进行校验responseData = retireInforService.getRetireInforsByStatus(token, status, start, pageSize);// JSONObject先转换成json字符串String respnJSON = JSON.toJSONString(responseData);// 转换成结果对象// Result<PageResult<RetireInfor>> pageResult =// (Result<PageResult<RetireInfor>>) JSON.parseObject(respnJSON,// new TypeReference<Result<PageResult<RetireInfor>>>() {// });Result<JSONObject> allResult = (Result<JSONObject>) JSON.parseObject(respnJSON,new TypeReference<Result<JSONObject>>() {});pageResult = (PageResult<RetireInfor>) JSON.parseObject(allResult.getContent().toString(),new TypeReference<PageResult<RetireInfor>>() {});
PageResult<RetireInfor>的格式是这样的:
package com.rmsClient.entity.po;import java.util.List;public class PageResult<T> {private Integer code;private String message;private Integer totalNum;// 总记录数private Integer totalPage;// 总页数private List<T> resultList;public Integer getTotalPage() {return totalPage;}public void setTotalPage(Integer totalPage) {this.totalPage = totalPage;}public Integer getTotalNum() {return totalNum;}public void setTotalNum(Integer totalNum) {this.totalNum = totalNum;}public List<T> getResultList() {return resultList;}public void setResultList(List<T> resultList) {this.resultList = resultList;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}}
还有另外一种情况2017年3月2日18:34:38:
当后台传递的对象里面还有一层List<对象>时,类似于:Result<List<WageItemInfor>>,这种时候就需要先将它转换成Result<JSONArray>,然后将里面的List使用json转换成数组,如下:
public List<WageItemInfor> getWageItemInfors(HttpServletRequest request) {JSONObject responseData = new JSONObject();List<WageItemInfor> list = null;try {HttpSession session = request.getSession();String token = (String) session.getAttribute(Constants.TOKEN);// 发送服务端进行校验responseData = wageStandardService.getWageItemInfors(token);// JSONObject先转换成json字符串String respnJSON = JSON.toJSONString(responseData);Result<JSONArray> allResult = (Result<JSONArray>) JSON.parseObject(respnJSON,new TypeReference<Result<JSONArray>>() {});//JSONArray这里要注意list就用这个,如果是对象,就用JSONObject,否则会报错// 将json转换成list数组list = JSONObject.parseArray(JSON.toJSONString(allResult.getContent()), WageItemInfor.class);} catch (Exception e) {LogUtil.error(e);}return list;}后台返回的对象格式类似于这样:
package com.springMVC.entity;import com.alibaba.fastjson.JSON;import com.springMVC.util.ExceptionCode;import com.wordnik.swagger.annotations.ApiModel;import com.wordnik.swagger.annotations.ApiModelProperty;@ApiModel(description = "结果集")public class Result<T> {@ApiModelProperty(value = "返回码")private Integer code;@ApiModelProperty(value = "返回信息")private String message;@ApiModelProperty(value = "返回值")private T content;public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public T getContent() {return content;}public void setContent(T content) {this.content = content;}public void setCodeAndMessage(ExceptionCode eCode) {this.code = eCode.getCode();this.message = eCode.getMessage();}@Overridepublic String toString() {StringBuilder sb = new StringBuilder();sb.append("{\n");sb.append(" code: ").append(code).append("\n");sb.append(" message: ").append(message).append("\n");sb.append(" content: ").append(JSON.toJSONString(content)).append("\n");sb.append("}");return sb.toString();}}
2.当点击登出时候,需要将浏览器上方的地址进行重定向到登陆界面,需要在modelandview里面添加重定向的关键字redirect,如果在拦截器里面需要跳转到登陆界面可以使用:response.sendRedirect(request.getContextPath() + "/login");,需要加上绝对路径:
// 登出@RequestMapping(value = "/user/logout", method = RequestMethod.POST)@ResponseBody@SystemLog(apiPath = "/user/logout")@ApiOperation(value = "登出", httpMethod = "POST", notes = "登出")public ModelAndView logout(HttpServletRequest request) {ModelAndView mav = new ModelAndView();JSONObject responseData = new JSONObject();ResultSimple loginResult = new ResultSimple();try {// 获取Session,判断是否能拿到token,如果没有的话,就需要跳转到主界面HttpSession session = request.getSession();String token = (String) session.getAttribute(Constants.TOKEN);// 发送服务端进行校验responseData = userService.logout(token);// JSONObject先转换成json字符串String respnJSON = JSON.toJSONString(responseData);// 转换成结果对象loginResult = (ResultSimple) JSON.parseObject(respnJSON, ResultSimple.class);// 如果登出成功,则删除掉session里面的tokenif (loginResult.getCode() == Constants.SUCCESSCODE) {// code为0代表成功session.removeAttribute(Constants.TOKEN);mav.setViewName("redirect:/login");}mav.addObject("logout", loginResult);} catch (Exception e) {LogUtil.error(e);}return mav;}
3.服务端的api分为后台的服务端和提供给前端的api接口,当发送一个get请求给后台时,参数里面有或者中文乱码的问题、空格或者\t等,就会报505的错误,所以需要将字符串中的这些字符都过滤掉,参考如下博客http://blog.csdn.net/qq_24531461/article/details/52934092:
public static String replaceBlank(String str) { String dest = ""; if (str != null) { Pattern p = Pattern.compile("\\s*|\t|\r|\n"); Matcher m = p.matcher(str); dest = m.replaceAll(""); } return dest; }
还有就是参数的中文乱码问题,也需要处理和考虑
4.从前台传给我的查询条件,是一个json对象,后台有一个对应的实体类,使用fastjson转换的时候遇到错误WageQueryCriteria criteria = JSONObject.parseObject(wageQueryCriteria, WageQueryCriteria.class);:如果WageQueryCriteria 里面有属性是list类型的就会报错:fastjson exepct '[', but string, type : class,原因应该是list属性的问题,解决方法是:
可以让前台将list转成json格式的。
5.当你使用http的put/get发送请求给服务端的时候,有时候要注意的是将参数拼接,需要转换成object形式,如果是字符串会有报错,比如后台需要date类型,就会报400或者505的错误,需要变成object类型。 当使用get请求,url参数进行拼接的时候,如果参数为null,就会导致报错,需要进行判断,然后置为:“”,这样就不会报错了,如下:
// 这里注意是否无误需要判断是否为null的情况,需要转换为""才会不报错Object corrString = null;if (correct == null) {corrString = "";} else {corrString = correct;}// get请求,将参数和访问接口进行拼接String getURL = Method.RETIREINFOR_GETRETIREINFORBYSTATUS + "?status=" + status + "&page=" + page+ "&correct=" + corrString + "&pageSize=" + pageSize + "&token=" + token;responseData = super.sendHttpGET(getURL);
4.遇到一个很奇葩的问题是同事的电脑,获取的date是有GMT格式的,而我几个同事是cst格式的,,这样导致后台获取时间有误,需要手动增加一行代码使时区都为cst格式,如下:
OutputStream outputStream = null;OutputStreamWriter outputStreamWriter = null;InputStream inputStream = null;InputStreamReader inputStreamReader = null;BufferedReader reader = null;StringBuffer resultBuffer = new StringBuffer();String tempLine = null;try {outputStream = httpURLConnection.getOutputStream();outputStreamWriter = new OutputStreamWriter(outputStream,charset);
- Springmvc遇到的问题和解决方案(仅供自己参考,不喜勿喷)
- Web开发中遇到关于spring注入的问题(尚未整理 仅供自己参考)
- mysql参考(仅供自己参考)
- 搜集论坛SQL问题集合.仅供自己和有兴趣的朋友参考。不做其他用途
- maven学习(仅供自己参考)
- gsoap编译(仅供自己参考)
- 最近遇到的之前没遇到的但是很常用的问题(仅供自己记录)
- Struts标签库(仅供自己参考)
- 多并发条件依赖执行 (仅供自己参考)
- jq封装ajax的一些方法(仅供自己参考)
- log4j学习_仅供自己参考
- urlrewrite学习_仅供自己参考
- proxool学习_仅供自己参考
- hadoop个人笔记,仅供自己参考
- 仅供自己参考第三方登录
- 重复执行sql语句前的判断参考-仅供自己备忘参考
- ios的位置和方向(来自苹果官方文档,仅供简单参考)
- enum枚举的试用笔记 (仅供个人参考)
- [Leetcode] #98 Validate Binary Search Tree
- C盘空间爆满原因之1--CAB开头的临时文件
- sparkMlib逻辑回归分析实现
- c++ vector(向量)使用方法详解
- 新曝WordPress REST API内容注入漏洞详解
- Springmvc遇到的问题和解决方案(仅供自己参考,不喜勿喷)
- 蓝桥杯 算法训练 操作格子
- jquery控制css3动画播放
- Styles
- 《OpenCV》Part11 OpenCV3.1.0 Qt中的信号槽函数传递cv::Mat格式参数
- 安卓自定义充值组件item
- 欢迎使用CSDN-markdown编辑器
- 通过反射来使edittext获取焦点时,不弹出键盘
- PHP源码解析笔记1-源码中的常用代码