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 "可是这和我是一个冷酷的复读机又有什么关系呢?";
    }
}

 

posted @ 2023-03-03 16:51  在博客做笔记的路人甲  阅读(32)  评论(0编辑  收藏  举报