五、JSON交互
- @ResponseBody 作用于返回的对象,将数据转化为指定的json格式
- 如果传的是json字符串
var jsonObject = JSON.parse(jsonStr);
- 解决方案一:在js中把json字符串转成json对象
- 解决方案二:将json字符串传到controller,要设置自编码格式
$.ajax({ url:"${pageContext.request.contextPath}/login", type:"post", data:jsonStr, contentType:"application/json;charset=UTF-8", dataType:"json",//返回数据类型 success:function(data){ alert(data.code) } }) |
然后在形参上,将json字符串转成json对象格式
@RequestMapping(value="login2") @ResponseBody public Map login2(@RequestBody User user) { //@RequestBody读取请求中的内容,把它转成json格式,然后在进行数据绑定到形参上 Map<String, Object> map = new HashMap<>(); if (user.getUsername()!=null&&user.getUsername().length()>3) { map.put("code", 1); }else{ map.put("code", 0); } return map; }
|
3.RESTFUL风格(只用在GET请求)(软件架构风格)
把请求中的参数变成请求的路的一种风格。
- 传统的方式url:http://localhost:8080/SpringMVC04/user/ select?id=2
- RESTFUL风格:http://localhost:8080/SpringMVC04/user/select/2
- 写法:
@RequestMapping(value="select/{id}") //{id}表示动态参数,用于匹配以/select/{id} 结尾的请求 public ModelAndView select(@PathVariable int id) { //@PathVariable用于接收并且绑定请求中的参数 ModelAndView mv = new ModelAndView(); mv.addObject("msg","接收到的id:"+id); mv.setViewName("/user.jsp"); return mv; } |
六、拦截器
类似于servlet中的过滤器,主要用于对处理器进行预处理和后处理。用于拦截用户的请求并且进行响应的处理。
MyInterceptor.java
public class MyInterceptor implements HandlerInterceptor{ /** * 在处理器方法之前执行 * 返回true则向下继续执行,如果返回false,则终端执行 * 适合登录验证、权限检查等 */ @Override public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception { System.out.println("preHandle...."); return true; }
/** * 在处理器方法之后,并且在视图解析器之前执行 * 对请求域中的数据和视图做出修改,可加入一些公共的数据信息等 */ @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { System.out.println("postHandle..."); } /** * 整个请求-响应完成后再执行 * 适合:清理资源、记录日志 */ @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { System.out.println("afterCompletion..."); } } |
springmvc.xml
<!-- 配置拦截器 --> <mvc:interceptors> <!-- 单个拦截器 --> <mvc:interceptor> <!-- 配置拦截器作用的路径 --> <mvc:mapping path="/**"/> <!-- 配置不需要拦截的路径 --> <mvc:exclude-mapping path=""/> <!-- 拦截器的bean --> <bean class="com.szy.interceptor.MyInterceptor"></bean> </mvc:interceptor> </mvc:interceptors> |