Spring(4)——响应相关

一、返回静态页面

1.1**@RestController@Controller**

想返回如下页面:

如果我们依旧使用原来的**@RestController**

可以看到的是仅仅返回了字符串。

此时将**@RestController改为@Controller**

可以看到这次返回的是html页面。

那么**@RestController @Controller有什么区别和联系呢,这就要从MVC架构说起了,最开始设计View是要返回视图的,但随着技术的发展,前后端分离程度越来越高,Java后端开始只关注于后端的事务,不在关注前端的呈现,MVC也就发生了变化,View不在返回视图,而是返回显示视图时所需要的数据。所以前面使用的@RestController**其实返回的是数据。

@RestController = @Controller + @ResponseBody

@Controller :定义⼀个控制器,Spring框架启动时加载,把这个对象交给Spring管理。

@ResponseBody :定义返回的数据格式为⾮视图,返回⼀个text/html信息。

@ResponseBody既可以作为类注解也可以作为方法注解,如果标记在类上,那么表示该类中的所有方法都返回的是数据,如果一个类中既有返回视图的方法也有返回注解的方法,那么只用把**@ResponseBody**标注到对应方法上即可。

所以在有**@Controller注解的基础上添加 @ResponseBody注解就等于直接标注@RestController**。

java 复制代码
@Controller
@RequestMapping("/response")
public class ResponseController {
    //返回视图
    @RequestMapping("/responseHelloPage")
    public String requestHelloPage(){
        return "/hello.html";
    }

    //返回数据
    @RequestMapping("/responseHelloPage2")
    @ResponseBody
    public String requestHelloPage2(){
        return "返回数据";
    }
}


在标注了@Controller的类(表明该类中所有方法都返回视图)里,有一个需要返回数据的方法,但是该方法没有标注@ResponseBody,那么客户端在请求这个页面的时候会发生404错误:

java 复制代码
@Controller
@RequestMapping("/response")
public class ResponseController {
    //返回视图
    @RequestMapping("/responseHelloPage")
    public String requestHelloPage(){
        return "/hello.html";
    }

    //返回数据
    @RequestMapping("/responseHelloPage2")
    //去掉@ResponseBody注解
    public String requestHelloPage2(){
        return "返回数据";
    }
}

1.2 返回Html片段

java 复制代码
@RequestMapping("/returnHtml")
    @ResponseBody
    public String returnHtml() {
        return "<h1>Hello,HTML~</h1>";
    }

1.3 返回Json

java 复制代码
@RequestMapping("/returnJson")
    @ResponseBody
    public HashMap<String, String> returnJson() {
        HashMap<String, String> map = new HashMap<>();
        map.put("Java", "Java Value");
        map.put("MySQL", "MySQL Value");
        map.put("Redis", "Redis Value");
        return map;
    }

通过Json返回一个对象:

java 复制代码
@RequestMapping("/returnUser")
    @ResponseBody
    public User returnUser() {
       User user = new User("zhangsan",18,"未知");
        return user;
    }

1.4 设置状态码

SpringMVC会根据我们⽅法的返回结果⾃动设置响应状态码,程序员也可以⼿动指定状态码,通过SpringMVC的内置对象HttpServletResponse提供的⽅法来进⾏设置 。

java 复制代码
@RequestMapping(value = "/setStatus")
    @ResponseBody
    public String setStatus(HttpServletResponse response) {
        response.setStatus(401);
        return "设置状态码成功";
    }
相关推荐
pinlantu2 分钟前
Java开发笔记(一百五十五)生成随机数的几种途径
java·eclipse
码出极致11 分钟前
Redisson分布式缓存与数据一致性保障
后端
用户7903490337114 分钟前
springboot集成redisson实现redis分布式锁
后端
陈随易19 分钟前
程序员的新玩具,MoonBit(月兔)编程语言科普
前端·后端·程序员
码出极致25 分钟前
Redisson秒杀系统中的分布式锁应用
后端
Shimiy31 分钟前
第四章 数组
java
间彧31 分钟前
什么是JVM Young GC
java·jvm
xiaok32 分钟前
@Param注解的作用
java·后端
脑袋大大的35 分钟前
钉钉企业应用开发技巧:查询表单实例数据新版SDK指南
java·钉钉·企业应用开发
Sperains40 分钟前
async/await和Synchronous的区别
后端