目录

请求

# 请求

在日常开发时,一个项目肯定不会是一个人完成的,往往需要一整个团队合力完成。 但配置请求路径时,你如何确保其他人配置的路径与你不冲突呢?

常见的方法就是 小明:负责user_info模块开发,因此所有路径必须是/user/xxxx 小红:负责eco模块开发,因此所有路径必须是/eco/xxxx

这的确能解决上述提到的问题。但倘若你的模块有三十几条路径,你每个方法都需要输入/user实在很麻烦,而且难保会不会某一个出差错。

有个很好的方法是:


// 访问路径:http://localhost:8080/user/save
@Controller  
@RequestMapping("/user")  
public class UserController {  
  
    @RequestMapping("/save")  
    @ResponseBody  
    public String save(){  
        System.out.println("Loading save()...");  
        return "{'module':'springmvc'}";  
    }  
}
1
2
3
4
5
6
7
8
9
10
11
12
13

当你在class上设置@RequestMapping时,它就会认为这是路径前缀,这样一来,可以避免重复输入前缀,减少出错的情况。

# 提醒

上面我们的路径耦合度很高,为了避免这种情况,还是建议使用properties解决,方法和Spring一样。

# Get&Post参数接收

@RequestMapping("/save")  
@ResponseBody  
public String save(String name){  
    System.out.println("Loading save()..."+name);  
    return "{'module':'springmvc'}";  
}
1
2
3
4
5
6
# POST中文乱码

之前解决乱码问题时,我们是通过过滤器(Filter)实现的,但现在在SpringMVC中该如何做呢?

我们需要在主类配置中进行方法重新,我们的主类配置是继承自AbstractAnnotationConfigDispatcherServletInitializer,我们可以重写其getServletFilters方法

public class SContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {

	@Override  
	protected Filter[] getServletFilters() {  
	    CharacterEncodingFilter filter = new CharacterEncodingFilter();  
	    filter.setEncoding("UTF-8");  
	    return new Filter[]{filter};  
	}
}
1
2
3
4
5
6
7
8
9

# 参数名

前面的例子中

@RequestMapping("/save")  
@ResponseBody  
public String save(String name){  
    System.out.println("Loading save()..."+name);  
    return "{'module':'springmvc'}";  
}
1
2
3
4
5
6

但如果参数名与前端提供的参数名不同,则会接收不到参数,因此,我们需要为参数添加别名,从而更好地接收参数。

@RequestMapping("/save")  
@ResponseBody  
public String save(@RequestParam("userName") String name){  
    System.out.println("Loading save()..."+name);  
    return "{'module':'springmvc'}";  
}
1
2
3
4
5
6

这样,就算前端给的是userName你也能接收到了

# POJO传参

POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。
使用POJO (opens new window)名称是为了避免和EJB混淆起来, 而且简称比较直接. 其中有一些属性及其getter setter方法的类,没有业务逻辑,有时可以作为VO(value -object)或dto(Data Transform Object)来使用.当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法,也不能携带有connection之类的方法。

简而言之: 一个仅包含变量和其getter&setter等基本函数的类,不包含业务逻辑函数

//POJO类
public class User {  
    private String name;  
    private int age;  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    @Override  
    public String toString() {  
        return "User{" +  
                "name='" + name + '\'' +  
                ", age=" + age +  
                '}';  
    }  
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//控制类
@Controller  
public class UserController {  
  
    @RequestMapping("/save")  
    @ResponseBody  
    public String save(User user){  
        System.out.println("Loading save()..."+user);  
        return "{'module':'springmvc'}";  
    }  
}
1
2
3
4
5
6
7
8
9
10
11

Loading save()...User{name='飞猪', age=22}

# 嵌套POJO传参

即POJO类中包含引用类型

public class User {  
    private String name;  
    private int age;  
    private Address address;  
  
    @Override  
    public String toString() {  
        return "User{" +  
                "name='" + name + '\'' +  
                ", age=" + age +  
                ", address=" + address +  
                '}';  
    }  
  
    public Address getAddress() {return address;}  
  
    public void setAddress(Address address) {this.address = address;}  
  
    public String getName() {return name;}  
  
    public void setName(String name) {this.name = name;}  
  
    public int getAge() {return age;}  
  
    public void setAge(int age) {this.age = age;}  
  
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class Address {  
    private String location;  
  
    public String getLocation() {return location;}  
  
    public void setLocation(String location) {this.location = location;}  
  
    @Override  
    public String toString() {  
        return "Address{" +  
                "location='" + location + '\'' +  
                '}';  
    }  
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//控制类
@Controller  
public class UserController {  
  
    @RequestMapping("/save")  
    @ResponseBody  
    public String save(User user){  
        System.out.println("Loading save()..."+user);  
        return "{'module':'springmvc'}";  
    }  
}
1
2
3
4
5
6
7
8
9
10
11

传参 ![[Pasted image 20220615155254.png]]

Loading save()...User{name='飞猪', age=22, address=Address{location='地球'}}

# 数组传参

常见于checkbox的提交

@Controller  
public class UserController {  
  
    @RequestMapping("/save")  
    @ResponseBody  
    public String save(String[] likes){  
        System.out.println("Loading save()..."+ Arrays.toString(likes));  
        return "{'module':'springmvc'}";  
    }  
}
1
2
3
4
5
6
7
8
9
10

传参 ![[Pasted image 20220615155453.png]] Loading save()...[飞猪, 携程, 乐活]

# 集合传参
@Controller  
public class UserController {  
  
    @RequestMapping("/save")  
    @ResponseBody  
    public String save(@RequestParam List<String> likes){  
        System.out.println("Loading save()..."+ likes);  
        return "{'module':'springmvc'}";  
    }  
}
1
2
3
4
5
6
7
8
9
10

切记,集合传参一定要加@RequestParam否则会当作POJO对象处理

# 接收JSON类型数据

想要接收Json数据相比其他数据较为麻烦

  1. 导入依赖
<dependency>  
  <groupId>com.fasterxml.jackson.core</groupId>  
  <artifactId>jackson-databind</artifactId>  
  <version>2.13.3</version>  
</dependency>
1
2
3
4
5
  1. 在核心配置中(SpringMVCConfig)添加@EnableWebMvc注释
@Configuration  
@ComponentScan("com.project.controller")  
@EnableWebMvc  
public class SpringMVCConfig {  
}
1
2
3
4
5
  1. 在控制器中的函数参数加上@RequestBody
@Controller  
public class UserController {  
  
    @RequestMapping("/save")  
    @ResponseBody  
    public String save(@RequestBody List<String> likes){  
        System.out.println("Loading save()..."+ likes);  
        return "{'module':'springmvc'}";  
    }  
}
1
2
3
4
5
6
7
8
9
10
  1. 发送json数据
# POJO Json

代码和先前一样的POJO案例用到的一样,唯一不同的是控制器中的函数参数需要加上@RequestBody

传参

{ "name":"Lam ka kuan", "age":22, "address":{"location":"Beijing"}}
1

# @RequestBody & @RequestParam

![[Pasted image 20220615161822.png]]

最近更新
01
基本知识
07-18
02
卷积神经网络识别图像
07-18
03
损失函数
07-18
更多文章>