8/31 Spring学习博客

请求(续)

获取Header

1.传统方式

@RequestMapping("/getHeader")
    public String getHeader(HttpServletRequest request){
        String userAgent = request.getHeader("User-Agent");
        return "userAgent:"+userAgent;
    }

2.注解

@RequestMapping("/getHeader2")
    public String getHeader2(@RequestHeader("User-Agent") String userAgent){
        return "userAgent:"+userAgent;
    }

结果均为:
17796531b5c3706a3358c963dad1efd3

响应

1.返回静态页面
f4d94740d7cabcc9885e56cdf79a34b6

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

a54495f29da1243b772e12b1e06ac112

@RestController和@Controller之间的关系

@RestController 可以理解成:
@Controller + @ResponseBody 的组合。
也就是说,最大的区别在于:返回值默认是“页面”还是“数据”

举个例子

@Controller
public class UserController {

    @RequestMapping("/hello")
    public String hello() {
        return "hello";
    }
}

这里 return "hello",Spring 默认会把 "hello" 当成一个视图名称,比如去找: hello.html

如果想让它直接返回字符串 "hello" 给前端,就要加:@ResponseBody

@Controller
public class UserController {

    @RequestMapping("/hello")
    @ResponseBody
    public String hello() {
        return "hello";
    }
}

而使用 @RestController:

@RestController
public class UserController {

    @RequestMapping("/hello")
    public String hello() {
        return "hello";
    }
}

效果就等价于刚才的:
@Controller
@ResponseBody

来看看RestController的源码
02ac3a9cf5b8242bce36027d99b943b7

这三个则是元注解(可以注解到其他注解的注解)
c1062ac8230e3f0eef6be87f42b0bfb6

@Target:表示注解的使用范围

@Retention:表示注解的生命周期

@Documented 表示“这个注解的信息要被包含到 Javadoc 文档里”。

2.返回数据

通过 @ResponseBody
既可以修饰类也可以修饰方法

修饰类:表示该类所有的方法,返回的都是数据
修饰方法:表示该方法,返回的是数据

@RequestMapping("/r2")
    @ResponseBody
    public String r2(){
        return "hello,i am Spring";
    }

8a4ec7c02dd10b982a3a6d8a5cc4b3f7

@Controller默认返回的是页面
552944735aabf05153401ab20c600b6b

3.返回HTML片段

@ResponseBody
    @RequestMapping("/r3")
    public String r3(){
        return "<h1>hello,i am Spring</h1>" ;
    }

8439da7fef407abe982c40a6a9e65d26

7f4668a2f108eb7de3589993f181fa5f

4.返回JSON

@RequestMapping("/r4")
    @ResponseBody
    public UserInfo r4(){
        UserInfo userInfo = new UserInfo();
        userInfo.setId(1);
        userInfo.setName("zhangsan");
        userInfo.setAge(18);
        return userInfo;
    }

b01a42e9c24224a4b48726a6716f69bc

!!!Spring会根据我们返回的结果 动态的设置 Content-Type

@RequestMapping("/r5")
    @ResponseBody
    public Map<String,String> r5(){
        HashMap map = new HashMap();
        map.put("k1","v1");
        map.put("k2","v2");
        return map;
    }

ced27910f92aa88d832f711e951245d2

@RequestMapping("/r6")
    public String r6(){
        return "/a.js";
    }

93c67065c6bc9fc5f80a471988196675

@RequestMapping("/r7")
    public String r7(){
        return "/b.css";
    }

4f4fbc33deede9b70ae9b324874bf765

5.设置状态码

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

3195be25d8cb3794ebabd813d556ce45
a5ff9dcf260e44a61c4650ca896a4cec

状态码设置不影响页面显示

6.设置Header(了解)

(1)设置Content-Type
默认是text/html

通过produces设置

@RequestMapping(value = "/r9",produces = "application/json")
    @ResponseBody
    public String r9(){
        return "123456";
    }

bd198bc5cb4f984791c24ff86c8b4d4f

(2)自定义Header

我们后面进行校验就可以通过自定义header来实现

@RequestMapping("/r10")
    @ResponseBody
    public String r10(HttpServletResponse response){
        response.setHeader("myHeader","myValue");
        return "设置Header成功";
    }

9ffe2802ae1496c1f1c545ac1bc1ac23

到这SpringMVC基本学完

SpringMVC综合练习

接口定义:两个原则
1.看我需要什么(请求参数)
2.看对方需要什么(响应结果)

后端报错,如果肉眼一眼看不出来问题

  1. Debug
    2.把参数打印出来

简易计算器

前端

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
<form action="calc/sum" method="post">
    <h1>计算器</h1>
    数字1:<input name="num1" type="text"><br>
    数字2:<input name="num2" type="text"><br>
    <input type="submit" value=" 点击相加 ">
</form>
</body>

</html>

后端

package com.bite.spring;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/calc")
public class CalController {
    @RequestMapping("/sum")
    public String sum(Integer num1,Integer num2){
        int sum = num1+num2;
        return "sum="+sum;

    }
}
posted @ 2026-08-31 20:43  曾章吉的浩吧  阅读(3)  评论(0)    收藏  举报