SpringMVC-06-响应数据

1. 字符串

如果配置通过视图解析器,则返回的字符串会变成视图解析器的URL,不通过视图解析器则直接在浏览器中显示返回的字符串。
如需要返回参数,可以在方法的参数中加入Model ,然后将参数存入Model中。

2. void
  1. 默认会转发到当前Mapping通过视图解析器的地址。
  2. 实际中可以通过原生的API HttpServletRequest来实现转发:request.getRequestDispatcher(“URL”);
  3. 还可以用HttpServletResponse来实现重定向:response.sendRedirect(request.getContextPath"URL");
    注:重定向不能直接访问WEB-INF下的目录。
3. ModelAndView

与返回字符串类似,不过将Model和返回字符串合并为一个对象。返回 ModelAndView 类型时,浏览器跳转只能是请求转发。
注:不利于前后端分离

@RequestMapping(value = "/test")
    public ModelAndView json() {
        //创建mv对象
        ModelAndView mv = new ModelAndView();
        User user = new User("冰冰", 22);
        //往mv中存入对象,会将对象存到request对象中
        mv.addObject("user", user);
        //返回跳转地址
        mv.setViewName("hello");
        return mv;
    }
4. 转发和重定向

forward 转发
controller 方法在提供了 String 类型的返回值之后,默认就是请求转发。

@RequestMapping("/testForward")
public String testForward() {
System.out.println("AccountController 的 testForward 方法执了。。。。");
return "forward:/WEB-INF/pages/success.jsp";
}

需要注意的是,如果用了 formward:则路径必须写成实际视图 url,不能写逻辑视图。它相当于“request.getRequestDispatcher(“url”).forward(request,response)”。使用请求转发,既可以转发到 jsp,也可以转发到其他的控制器方法。

Redirect 重定向
contrller 方法提供了一个 String 类型返回值之后,它需要在返回值里使用:redirect:

@RequestMapping("/testRedirect")
public String testRedirect() {
System.out.println("AccountController 的 testRedirect 方法执行了。。。。");
return "redirect:testReturnModelAndView";
}

它相当于“response.sendRedirect(url)”。需要注意的是,如果是重定向到 jsp 页面,则 jsp 页面不能写在 WEB-INF 目录中,否则无法找到。
注:重定向默认应该写项目地址,这里框架自动加上了,不需要再写。

5. ResponseBody 响应 json 数据
  1. DispatcherServlet会拦截到所有的资源,导致一个问题就是静态资源(img、css、js)也会被拦截到,从而不能被使用。解决问题就是需要配置静态资源不进行拦截,在springmvc.xml配置文件添加如下配置
    mvc:resources标签配置不过滤
    location元素表示webapp目录下的包下的所有文件
    mapping元素表示以/static开头的所有请求路径,如/static/a 或者/static/a/b
<!-- 设置静态资源不过滤 -->
<mvc:resources location="/css/" mapping="/css/**"/> <!-- 样式 -->
<mvc:resources location="/images/" mapping="/images/**"/> <!-- 图片 -->
<mvc:resources location="/js/" mapping="/js/**"/> <!-- javascript -->
  1. 使用@RequestBody获取请求体数据
$(function(){
// 绑定点击事件
	$("#btn").click(function(){
		$.ajax({
			url:"user/testJson",
			contentType:"application/json;charset=UTF-8",
			data:'{"addressName":"aa","addressNum":100}',
			dataType:"json",
			type:"post",
			success:function(data){
				alert(data);
				alert(data.addressName);
			}
		});
	});
});
@RequestMapping("/testJson")
public void testJson(@RequestBody String body) {
System.out.println(body);
}

. json字符串和JavaBean对象互相转换的过程中,需要使用jackson的jar包

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
@RequestMapping("/testJson")
public @ResponseBody Address testJson(@RequestBody Address address) {
System.out.println(address);
address.setAddressName("上海");
return address;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值