首页 > 编程语言 >Java之Spring MVC篇三

Java之Spring MVC篇三

时间:2024-11-19 14:16:08浏览次数:3  
标签:返回 index Java String Spring ResponseBody MVC public RequestMapping

​​​​​​​

目录

响应

返回静态页面

@RestController 和 @Controller的区别和联系

返回数据@ResponseBody

关于@ResponseBody

返回HTML代码片段

返回JSON

设置状态码

设置Header

设置Content-Type

没设置Content-Type之前

设置Content-Type之后


响应

返回静态页面

首先在resourses/static路径下创建一个html文件:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Index⻚⾯</title>
</head>
<body>
 Hello,Spring MVC,我是Index⻚⾯.
</body>
</html>

处理并返回index.html的代码 

@RestController
public class ResponseController {
    @RequestMapping("/index")
    public String index(){
        return "/index.html";
    }
}

响应结果:

结果却发现, ⻚⾯未正确返回, http响应把 "/index.html" 当做了http响应正⽂的数据
那Spring MVC如何才能识别出来 index.html 是⼀个静态⻚⾯, 并进⾏返回呢?
我们需要把 @RestController 改为 @Controller。

修改后的代码:

@Controller
public class ResponseController {
    @RequestMapping("/index")
    public String index(){
        return "/index.html";
    }
}

响应结果:

@RestController 和 @Controller的区别和联系

@RestController=@ResponseBody+@Controller

联系

1.组合关系:@RestController 可以被视为 @Controller 和 @ResponseBody 的组合注解。这意味着,当你在类上使用 @RestController 注解时,它实际上同时应用了 @Controller 和 @ResponseBody 的效果。
2.用途相似:两者都用于处理 HTTP 请求,但它们处理请求后返回的内容类型不同。

区别 

1.返回内容类型:
@Controller:用于处理 HTTP 请求,并将处理结果返回给客户端。控制器类中的方法通常通过 @RequestMapping 或其衍生注解来映射特定的 URL 请求路径和 HTTP 方法。返回的结果可以是一个视图名称,框架会根据视图解析器将其解析为具体的视图页面(如 HTML 页面)。
@RestController:专门用于构建 RESTful API。与 @Controller 不同的是,@RestController 注解的类中的每个方法都默认返回 JSON、XML 或其他数据类型,而不是视图。在 Spring MVC 中,使用 @RestController 相当于在每个方法上都添加了 @ResponseBody 注解,用于直接返回数据对象或集合,而不是视图。
2.应用场景:
@Controller:通常用于传统的 Web 应用开发,负责处理 HTTP 请求,并返回视图页面。它适用于需要渲染视图页面的场景,如动态网站开发。
@RestController:则专门用于构建 RESTful API,处理 HTTP 请求,并直接返回数据对象或集合,而不是视图。它适用于构建微服务、移动应用后端服务等需要直接提供数据接口的场景。
默认行为:
使用 @Controller 注解的类,其方法默认返回的是视图名称,需要配合视图解析器来渲染视图。
使用 @RestController 注解的类,其方法默认返回的是 JSON、XML 等数据格式,Spring MVC 会自动将数据对象序列化为相应的格式,并设置正确的 HTTP 响应头。

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

关于@ResponseBody

@ResponseBody 既是类注解, ⼜是⽅法注解
如果作⽤在类上, 表⽰该类的所有⽅法, 返回的都是数据, 如果作⽤在⽅法上, 表⽰该⽅法返回的是数据.

因此,如果一个类的方法里面,既有返回数据的,又有返回页面(视图)的,就给添加@Controller注解,在返回数据的方法上添加@ResponseBody注解即可。 

@Controller
public class ResponseController {
    @RequestMapping("/index")
    public String index(){
        return "/index.html";
    }

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

如果没有给返回数据的方法添加@ResponseBody注解,会报错且状态码为404

@Controller
public class ResponseController {
    @RequestMapping("/index")
    public String index(){
        return "/index.html";
    }

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

返回HTML代码片段
    @ResponseBody
    @RequestMapping("/indexData2")
    public String indexData2(){
        return "<h1>我是中国人</h1>";
    }

响应:

通过fiddler抓包:

响应中的 Content-Type 常⻅取值有以下⼏种:
• text/html : body 数据格式是 HTML
• text/css : body 数据格式是 CSS
• application/javascript : body 数据格式是 JavaScript
• application/json : body 数据格式是 JSON
如果请求的是js⽂件, Spring MVC会⾃动设置Content-Type为 application/javascript
如果请求的是css⽂件, Spring MVC会⾃动设置Content-Type为 text/css

返回JSON
    @ResponseBody
    @RequestMapping("/getMap")
    public HashMap<String,String> getMap(){
        HashMap<String,String> map = new HashMap<>();
        map.put("k1","v1");
        map.put("k2","v2");
        map.put("k3","v3");
        map.put("k4","v4");
        return map;
    }

通过fiddler抓包:

设置状态码

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

    @ResponseBody
    @RequestMapping("/setStatus")
    public String setStatus(HttpServletResponse response){
        response.setStatus(418);
        return "设置状态码";
    }

响应: 

通过fiddler抓包:

设置Header

Http响应报头也会向客⼾端传递⼀些附加信息, ⽐如服务程序的名称,请求的资源已移动到新地址等, 如:Content-Type, Local等.
这些信息通过 @RequestMapping 注解的属性来实现.

下面我们看看@RequestMapping的源码:

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
@Reflective(ControllerMappingReflectiveProcessor.class)
public @interface RequestMapping {

	String name() default "";

	@AliasFor("path")
	String[] value() default {};

	@AliasFor("value")
	String[] path() default {};

	RequestMethod[] method() default {};

	String[] params() default {};

	String[] consumes() default {};

	String[] produces() default {};

}

 说明:

1. value: 指定映射的URL
2. method: 指定请求的method类型, 如GET, POST等
3. consumes: 指定处理请求(request)的提交内容类型(Content-Type),例如application/json,
text/html;
4. produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
5. Params: 指定request中必须包含某些参数值时,才让该⽅法处理
6. headers: 指定request中必须包含某些指定的header值,才能让该⽅法处理请求

设置Content-Type
没设置Content-Type之前
    @ResponseBody
    @RequestMapping("/setContentType")
    public String setContentType(){
        return "{\"OK\":1}";
    }

 

通过fiddler抓包:

设置Content-Type之后
    @ResponseBody
    @RequestMapping(value = "/setContentType1", produces = "application/json")
    public String setContentType1(){
        return "{\"OK\":1}";
    }

通过fiddler抓包:

标签:返回,index,Java,String,Spring,ResponseBody,MVC,public,RequestMapping
From: https://blog.csdn.net/wmh_1234567/article/details/142527176

相关文章

  • Java的类加载
    1.加载的时机(加载阶段虚拟机需要完成3件事)a.通过一个类的全限定名来获取定义此类的二进制字节流 b.将这个字节流所代表的的静态存储结构转化为方法区的运行时数据结构c.在内存中生成一个代表这个类的java.lang.Class对象,作业方法区这个类的各种数据的访问入口2.验......
  • 【java开发】Java随机数的种子
    在许多领域,比如模拟、游戏和密码学中,随机数担任非常重要的角色。然而,在计算机领域,随机数并非完全随机,它们是由模拟随机性的算法(称为伪随机性)生成的。在Java中,随机种子就是初始化伪随机数生成器(PRNG,PseudoRandomNumberGenerator)的值。我们一起探讨下,Java中随机种子的工作原理......
  • AI 实战篇:Spring-AI再更新!细细讲下Advisors
    在2024年10月8日,SpringAI再次进行了更新,尽管当前版本仍为非稳定版本(1.0.0-M3),但博主将持续关注这些动态,并从流行的智能体视角深入解析其技术底层。目前,SpringAI仍处于小众状态,尚未经过开源社区多年的维护和稳定化过程,这与已经较为成熟的Spring框架形成鲜明对比。即便是SpringAI......
  • 基于Springboot公司考勤管理系统【附源码+文档】
    ......
  • net MVC ActionResultObjectValueAttribute
    MVC返回结果IActionResultIActionResult派生类如下......
  • Java与大数据:二本硕士的最佳职业发展路径
    在当前激烈的就业环境下,二本院校的硕士生常常会陷入迷茫-是专注Java开发,还是投身大数据领域?经过多年的行业观察和实践,我想分享一个明确的答案:以Java为根基,再拓展大数据技术,这是一条稳健且高效的发展路径。作为亲历者和观察者,我看到太多求职者在技术选择上走了弯路。有的同学......
  • Springboot大学生个人财务管理系统13bek(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学校简介,学生,省钱妙招,收支类型,收入,消费等级,消费预算,借入记录,归还记录,支出开题报告内容一、研究背景随着社会经济的发展和大学教育的普及,大学生经济活......
  • Springboot大学生防诈骗网站设计与开发n0803(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,法规信息,骗局曝光,举报信息,法规类型开题报告内容一、课题背景与意义随着互联网技术的飞速发展,网络诈骗案件频发,大学生作为网络用户的重要群体,由于缺乏足......
  • Springboot大学生防诈骗网站chc9l(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学生,法律法规,诈骗案例开题报告内容一、课题背景与意义随着互联网技术的飞速发展,网络诈骗案件频发,大学生作为网络用户的重要群体,也频繁成为网络诈骗的受害者。......
  • Springboot创业园员工流动管理平台al084(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,经理,公司信息,部门信息,员工信息,请假信息,薪资信息,社保信息,入职统计,离职统计,请假统计开题报告内容一、研究背景随着创业园的快速发展,员工流动管理成......