请求与响应

设置映射路径 

在不同的bean中可能会出现相同名字的路径,这样的情况会产生冲突,为了解决这个冲突我们可以设置模块名作为请求路径前缀

@Controller
@RequestMapping("/book")
public class BookController {
    //设置当前操作的访问路径
    @RequestMapping("/save")
    //设置当前注解的返回值类型,将返回的内容整体作为响应给到外面
    @ResponseBody
    public String save(){
        System.out.println("springMvc is running");
        return "{'moudle':'springmvc'}";
    }
}
@Controller
@RequestMapping("/user")
public class UserController {
    //设置当前操作的访问路径
    @RequestMapping("/save")
    //设置当前注解的返回值类型,将返回的内容整体作为响应给到外面
    @ResponseBody
    public String save(){
        System.out.println("springMvc is running");
        return "{'moudle':'springmvc'}";
    }
}

get请求与post请求接受发送数据

首先,我们需要下载一个工具来帮助我们发送数据进行测试

叫做postman

下载好了以后先去注册,登陆进去以后用就完了很简单

请求与响应_第1张图片

Get请求的接受与发送

get请求发送的内容包含在他的请求行中,(get请求没有请求体)

请求与响应_第2张图片

 get请求参数接受,只需要在方法设置形参即可接收

//声明控制层的bean的注解
@Controller
@RequestMapping("/user")
public class UserController {
    //设置当前操作的访问路径
    @RequestMapping("/save")
    //设置当前注解的返回值类型,将返回的内容整体作为响应给到外面
    @ResponseBody
    public String save(String str,int age){
        System.out.println("str is"+str);
        System.out.println("age is "+age);
        //中文会出错!!稍后来解决
        return "测试成功了吗"+str+age;
    }
}

Post请求的发送和接收

Post请求需要放在请求体里进行发送,我们选择Boddy下的第三个选项

(第二个选项主要用来传送文件) 

请求与响应_第3张图片

Post请求的接受,同样给方法设置形参就可以 

@Controller
@RequestMapping("/book")
public class BookController {
    //设置当前操作的访问路径
    @RequestMapping("/save")
    //设置当前注解的返回值类型,将返回的内容整体作为响应给到外面
    @ResponseBody
    public String save(String name){
        System.out.println("Post is running"+name);
        return "wo shi post";
    }
}
    //设置过滤器解决中文乱码问题
    @Override
    protected Filter[] getServletFilters(){
        CharacterEncodingFilter filter=new CharacterEncodingFilter();
        filter.setEncoding("utf-8");
        return new Filter[]{filter};
    }

 如何解决GET和Post传递来的中文乱码问题

首先我们看看不使用Spring框架如何解决该问题

Post协议

使用字符缓冲流来输入数据,因此我们可以给缓冲流定义写入格式(utf-8)

Get协议

采用的是ISO-8859-1编码成二进制,而我们的Idea默认使用(utf-8),会造成冲突。

解决方法:我们将得到的异常文字通过ISO-8859-1重新编码成为二进制,再通过二进制转化做utf-8。(这是因为我们无法修改Tomcat的编码方式)

Spring框架下的解决方法

在SpringMvcConfig配置类中重写过滤器方法

(对web容器添加字符过滤器使其可以处理中文)

    //设置过滤器解决中文乱码问题
    @Override
    protected Filter[] getServletFilters(){
        CharacterEncodingFilter filter=new CharacterEncodingFilter();
        filter.setEncoding("utf-8");
        return new Filter[]{filter};
    }

参数种类

如果我们传递的参数是name,但是我们想要以不同的名称接受我们该如何传递呢?

我们可以使用@Requestparam("传递来参数的名字")注解进行声明

    @RequestMapping("/save")
    //设置当前注解的返回值类型,将返回的内容整体作为响应给到外面
    @ResponseBody
    public String save(@RequestParam("name") String UserName){
        System.out.println("Post is running“+UserName);
        return "wo shi post";
    }

1、传递pojo

传递时,变量名和pojo属性相同,传递进来会自动封装成对象

    @RequestMapping("/pojoParm")
    @ResponseBody
     public String pojoParm(User user){
        System.out.println(user);
        return "pojo is running";
     }

2、传递pojo类(这个pojo类中的属性含引用数据类型)

接受不产生变化

传递需要产生变化

以引用类型.属性名的方式进行添加

请求与响应_第4张图片

 3、传递数组信息

传递时需要以统一的变量名进行传递

请求与响应_第5张图片

以数组的方式进行接受

    @RequestMapping("/likes")
    @ResponseBody
    public String like(String[] like){
        System.out.println(Arrays.toString(like));
        return "like is running";
    }

4、传递一个集合

集合作为一个引用数据类型,Spring会自动将其作为一个对象进行处理,对于对象的处理方法是先创建一个对象再把对象其属性set进去。

我们希望外部的内容作为集合的数据出现,而不是给“集合”这种对象的属性进行赋值。

我们可以使用注解@RequestParam进行声明

注意:这里传入的集合必须是List,博主尝试了ArrayList报错了,还没尝试其他集合。

    @RequestMapping("/listParam")
    @ResponseBody
    public String like(@RequestParam List list){
        System.out.println(list);
        return "list is running";
    }

传递Json数据

你可能感兴趣的:(SSM,java,数学建模,开发语言)