SpringMVC:如何响应客服端的请求?
使用@RequestMapping注解,默认发生跳转。
使用@ResponseBody注解,则只响应数据,不发生跳转。
一、跳转:使用String类型返回值
跳转方式:
1、重定向:redirect: 资源路径
2、请求转发:forward:资源路径 (默认可以省略)
例子:
设置了页面重定向到main.jsp
@Controller public class LoginController { @RequestMapping("login/{uage}/{name}") public String demo(@PathVariable String name,@PathVariable("uage") int age){ System.out.println("restful风格获取参数:"+name+":"+age); return "redirect:/main.jsp"; } }
注意:
使用了转发声明后,会使用系统提供的视图解析器,不会走自定义的。(ViewResovler)
二、不跳转:只进行数据响应
场景:通过Ajax请求数据。
使用ResponseBody注解 ,实现不进行跳转,把返回值以流的形式响应给客户端。
(一)、响应一个json对象
当返回值为可以转换为json对象的值(满足key-value形式)时,会设置响应格式为 application/json;charset=utf-8 ,会把它转化为一个json对象写入响应流中。(底层使用jackson组件实现)
例子:
把User对象以json对象的形式相应给客户端。
@Controller public class LoginController { @RequestMapping("login") @ResponseBody public User demo(){ User user = new User("lurenjia",18); return user; } }
(二)、响应其它数据
当返回值不满足key-value形式,则会设置相应格式为 text/html ,把值写入响应流中。
例子:
把一段话响应给请求端,其中使用中文会出现乱码,可使用RequestMapping注解的 produces属性 设置响应头的Context-Type属性。
@Controller public class LoginController { @RequestMapping(value = "demo",produces = "text/html;charset=utf-8") @ResponseBody public String demo(){ return "可是这和我是一个冷酷的复读机又有什么关系呢?"; } }