IT评测·应用市场-qidao123.com

标题: Spring Web 开发(相应)| lombok工具 | 快速引用依赖 [打印本页]

作者: 惊雷无声    时间: 2024-12-2 17:50
标题: Spring Web 开发(相应)| lombok工具 | 快速引用依赖

大家好我叫小帅,今天我们来学习Spring Web开发的相应

  

1. 相应

在我们前⾯的代码例⼦中,都已经设置了相应数据, Http相应效果可以是数据, 也可以是静态⻚⾯,也可以针对相应设置状态码, Header信息等。
1.1 返回静态⻚⾯

创建前端⻚⾯ index.html(注意路径)
现在我们学习的前端页面,先放在这里。

html代码如下:
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>Index⻚⾯</title>
  6. </head>
  7. <body>
  8.     Hello,Spring MVC,我是Index⻚⾯.
  9. </body>
  10. </html>
复制代码
后端代码:
  1. @RestController
  2. @RequestMapping("/html")
  3. public class Html {
  4.     @RequestMapping("getHtml")
  5.     public String getHtml() {
  6.         return "/index.html";
  7.     }
  8. }
复制代码
没有跳转

效果却发现, ⻚⾯未正确返回, http相应把 “/index.html” 当做了http相应正⽂的数据,
那Spring MVC怎样才能识别出来 index.html 是⼀个静态⻚⾯, 并进⾏返回呢?
我们须要把 @RestController 改为 @Controller
解释:

代码:
  1. @Controller
  2. @RequestMapping("/html")
  3. public class Html {
  4.     @RequestMapping("getHtml")
  5.     public String getHtml() {
  6.         return "/index.html";
  7.     }
  8. }
复制代码
效果:

跳转成功!!
所以前⾯使⽤的 @RestController 其实是返回的数据.

1. 2 返回数据@ResponseBody

我们上面讲到@ResponseBody 表⽰返回数据.,我们就来试一试.
代码:
  1. @Controller
  2. @ResponseBody
  3. @RequestMapping("/html")
  4. public class Html {
  5.     @RequestMapping("getHtml")
  6.     public String getHtml() {
  7.         return "/index.html";
  8.     }
  9. }
复制代码
效果:

加上 @ResponseBody 注解, 该⽅法就会把 “/index.html” 当做⼀个数据返回给前端.
@ResponseBody 既是类注解, ⼜是⽅法注解
假如作⽤在类上, 表⽰该类的所有⽅法, 返回的都是数据, 假如作⽤在⽅法上, 表⽰该⽅法返回的是数据.
代码:
  1. @Controller
  2. @RequestMapping("/html")
  3. public class Html {
  4.     @RequestMapping("getHtml")
  5.     public String getHtml() {
  6.         return "/index.html";
  7.     }
  8.     @ResponseBody
  9.     @RequestMapping("getData")
  10.     public String getData() {
  11.         return "/data";
  12.     }
  13. }
复制代码
输出效果:

   多个注解时, 没有先后顺序, 先写哪个都可以
  假如去掉 @ResponseBody 注解, 步伐会报404错误,步伐会以为须要返回的是视图, 根据内容去查找⽂件, 但是查询不到, 路径不存在, 报404

1.3 返回HTML代码⽚段

后端返回数据时, 假如数据中有HTML代码, 也会被欣赏器解析
代码:
  1. @Controller
  2. @RequestMapping("/html")
  3. public class Html {
  4.     @ResponseBody
  5.     @RequestMapping("/getHtml")
  6.     public String getHtml() {
  7.         return "<p>返回一个html代码</p>";
  8.     }
  9. }
复制代码
效果:


简直,返回一个html代码。

1.4 相应中的 Content-Type 常⻅取值有以下⼏种:


1.5 返回JSON

Spring MVC 也可以返回JSON
代码:
  1.     @RequestMapping("/getJson")
  2.     @ResponseBody
  3.     public HashMap<String, String> getJson1() {
  4.         HashMap<String, String> map = new HashMap<>();
  5.         map.put("Java", "Java Value");
  6.         map.put("MySQL", "MySQL Value");
  7.         map.put("Redis", "Redis Value");
  8.         return map;
  9.     }
  10.     //直接告诉前端,我返回的是JSON,在@RequestMapping添加参数produces = "application/json"
  11.     @RequestMapping(value = "/getJsonBean", produces = "application/json")
  12.     @ResponseBody
  13.     public String getJson2() {
  14.         User user = new User("zhangsan", "123");
  15.         return user.toString();
  16.     }
复制代码
第一个代码效果:

第二段代码效果:



1.6 设置状态码(Status)

代码:
  1. @Controller
  2. @RequestMapping("/html")
  3. public class Html {
  4.     @ResponseBody
  5.     @RequestMapping("/setStatus")
  6.     public String setStatus(HttpServletResponse response) {
  7.         //设置返回状态码
  8.         response.setStatus(410);
  9.         return "状态码设置成功";
  10.     }
  11. }
复制代码
效果:



1.7 设置Header (了解)

Http相应报头也会向客⼾端传递⼀些附加信息, ⽐如服务步伐的名称,哀求的资源已移动到新地址等, 如:
Content-Type, Local等.
这些信息通过 @RequestMapping 注解的属性来实现
先来看 @RequestMapping 的源码:
  1. @Target({ElementType.TYPE, ElementType.METHOD})
  2.     @Retention(RetentionPolicy.RUNTIME)
  3.     @Documented
  4.     @Mapping
  5.     public @interface RequestMapping {
  6.         String name() default "";
  7.         @AliasFor("path")
  8.         String[] value() default {};
  9.         @AliasFor("value")
  10.         String[] path() default {};
  11.         RequestMethod[] method() default {};
  12.         String[] params() default {};
  13.         String[] headers() default {};String[] consumes() default {};
  14.         String[] produces() default {};
  15.     }
复制代码

1.7.1 设置Content-Type

我们通过设置 produces属性的值, 设置相应的报头Content-Type
代码:
  1. public class Html {
  2.     @RequestMapping(value = "/returnJson",produces = "application/json")
  3.     @ResponseBody
  4.     public String returnJson2() {
  5.         return "{"success":true}";
  6.     }
  7. }
复制代码
效果:


假如不设置produces , ⽅法返回效果为String时, Spring MVC默认返回范例, 是text/html.
设置返回范例时, 也可以同步设置相应编码
代码:
  1.     @RequestMapping(value = "/returnJson",produces = "application/json;charset=utf-8")
  2.     @ResponseBody
  3.     public String returnJson2() {
  4.         return "{"success":true}";
  5.     }
复制代码


1.7.1 设置其他Header

设置其他Header的话, 须要使⽤Spring MVC的内置对象HttpServletResponse 提供的⽅法来进⾏设置
代码:
  1. public class Html {
  2.     @RequestMapping(value = "/setHeader")
  3.     @ResponseBody
  4.     public String setHeader(HttpServletResponse response) {
  5.         response.setHeader("MyHeader","MyHeaderValue");
  6.         return "设置Header成功";
  7.     }
  8. }
复制代码
  void setHeader(String name, String value) 设置⼀个带有给定的名称和值的 header. 假如 name
已经存在, 则覆盖旧的值
  效果:

利用抓包工具看看:


1.8 lombok工具包

Lombok是⼀个Java⼯具库,通过添加注解的⽅式,简化Java的开发.
  1. <dependency>
  2. <groupId>org.projectlombok</groupId>
  3. <artifactId>lombok</artifactId>
  4. <optional>true</optional>
  5. </dependency>
复制代码
  1. @Data
  2. public class Person {
  3.    private int id;
  4.    private String name;
  5.    private String password;
  6. }
复制代码
@Data 注解会资助我们⾃动⼀些⽅法, 包罗getter/setter, equals, toString等
这不是真正的字节码⽂件, ⽽是Idea根据字节码进⾏反编译后的⽂件反编译是将可执⾏的步伐代码转换为某种形式的⾼级编程语⾔, 使其具有更易读的格式. 反编译是⼀种逆向⼯程,它的作⽤与编译器的作⽤相反。


可以看出来, lombok是⼀款在编译期⽣成代码的⼯具包.
Java 步伐的运⾏原理:

Lombok 的作⽤如下图所⽰:

4. 更多使⽤
假如觉得@Data⽐较粗暴(⽣成⽅法太多), lombok也提供了⼀些更风雅粒度的注解
注解作⽤@Getter⾃动添加 getter ⽅法@Setter⾃动添加 setter ⽅法@ToString⾃动添加 toString ⽅法@EqualsAndHashCode⾃动添加 equals 和 hashCode ⽅法@NoArgsConstructor⾃动添加⽆参构造⽅法@AllArgsConstructor⾃动添加全属性构造⽅法,顺序按照属性的界说顺序@NonNull属性不能为 null@RequiredArgsConstructor⾃动添加必需属性的构造⽅法,final + @NonNull 的属性为必需 @Data = @Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor+ @NoArgsConstructor
这里我们演示两个@Getter和@ToString


1.9 更快捷的引⼊依赖

专业版自带
然后,字pom.xml文件下右击鼠标




这里就可以快速引入依赖。
不是所有依赖都可以在这⾥添加的, 这个界⾯和SpringBoot创建项⽬界⾯⼀样.依赖不在这⾥的, 还须要去Maven堆栈查找坐标, 添加依赖.
好了,今天讲到这里,感谢观看。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4