SpringMVC-设置请求映射路径&请求与响应

请求映射路径的书写

  • 我们可以将@RequestMapping注解放到控制层类前,,这样在控制层里面的所有方法前缀都会添加其共有的部分,见代码展示如下:
@Controller
@RequestMapping("/book")
public class BookController {
    @RequestMapping("/save")
    @ResponseBody
    public String save(){
        System.out.println("book save ... ");
        return "{'module':'book save'}";
    }
}

请求

  • 对普通参数的请求,可以直接使用形参与请求名相同的方式直接获取,并且没有特殊要求,Get与POST请求都可以直接接收,详细代码如下:
@Controller
public class UserController {


    @RequestMapping("/commonParam")
    @ResponseBody
    //普通参数传递
    public String commonParam(String username, int age) {
        System.out.println("普通参数传递:" + username + ",age:" + age);
        return "{'module':' common param'}";
    }

}
  • 这里get与post都可以

*(Post)乱码处理: 有时候我们会遇到参数值为中文的情况,这时需要在继承了AbstracrAnnotationConfigDispatchServletInitialiter接口的servlet配置类中进行过滤处理,详细代码如下:

public class ServletContainerInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[0];
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    //乱码处理
    @Override
    protected Filter[] getServletFilters() {
        //字符过滤器
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        //多个过滤器用逗号隔开
        return new Filter[]{filter};
    }
}

五种参数类型的传递

  • 普通类型
  • 形参
  • POJO
  • 数组
  • 集合
    具体代码如下,可以根据代码找到自己想找的部分:
@Controller
public class UserController {


    @RequestMapping("/commonParam")
    @ResponseBody
    //普通参数传递
    public String commonParam(String username, int age) {
        System.out.println("普通参数传递:" + username + ",age:" + age);
        return "{'module':' common param'}";
    }

    //普通参数:请求参数名与形参名不同
//    @RequestParam注解,参数:required:是否为必传参数,defaulfValue:默认参数值
    @RequestMapping("/commonParamDifferentName")
    @ResponseBody
    public String commonParamDifferName(@RequestParam("name") String username, @RequestParam("age") int age) {
        System.out.println("普通参数传递 username==>" + username);
        System.out.println("普通参数传递 age==>" + age);
        return "{'module':'commonParamDifferName'}";
    }

    //POJO参数
    @RequestMapping("/pojoParam")
    @ResponseBody
    public String pojoParam(User user) {
        System.out.println("pojo参数传递==>" + user);
        return "{'module':'pojoParam'}";

    }

    //嵌套POJO参数
    //传递时使用address.city
    @RequestMapping("/pojoContainParam")
    @ResponseBody
    public String pojoContainParam(User user) {
        System.out.println("pojo嵌套pojo参数传递==>" + user);
        return "{'module':'pojoContainParam'}";
    }

    //数组操作
    //会自动识别
    @RequestMapping("arrayParam")
    @ResponseBody
    public String arrayParam(String[] likes) {
        System.out.println("pojo嵌套pojo参数传递==>" + likes.toString());
        return "{'module':'arrayParam'}";
    }

    //集合参数
    @RequestMapping("listParam")
    @ResponseBody
    public String listParam(@RequestParam List<String> list) {
        System.out.println("pojo嵌套pojo参数传递==>" + list.toString());
        return "{'module':'listParam'}";
    }

}

JSON数据传递参数

①添加坐标、

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.2.1</version>
    <!--            <version>2.9.0</version>-->
</dependency>

②发送JSON数据

在这里插入图片描述

③开启自动转换对json数据的支持

@Configuration
@ComponentScan("com.itheima.controller")
//开启由Json转换为对象
@EnableWebMvc
public class SpringMvcConfig {

}

④设置接收json数据

//集合参数:json格式
@RequestMapping("/listParamForJson")
@ResponseBody
public String listParamForJson(@RequestBody List<String> likes) {
    System.out.println("list common(json)传递参数==>" + likes);
    return "{'module':'list common ForJson'}";
}

//POJO参数:json格式
@RequestMapping("/pojoParamForJson")
@ResponseBody
public String listParamForJson(@RequestBody User user) {
    System.out.println("pojo(json)传递参数==>" + user);
    return "{'module':'listParamForJson'}";
}

//集合参数:json格式
@RequestMapping("/listpojoParamForJson")
@ResponseBody
public String listPojoParamForJson(@RequestBody List<User> list) {
    System.out.println("pojo(json)传递参数==>" + list);
    return "{'module':'list pojo Param For Json param'}";
}

日期参数类型传递

(详见代码部分注释)

//日期参数
@RequestMapping("/dateParam")
@ResponseBody
//2088/08/08可以直接匹配Date,说明这是一个标准格式
//date1的格式
public String dataParam(Date date, @DateTimeFormat(pattern = "yyyy-MM-dd") Date date1,
                        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")Date date2) {
    System.out.println("data传递参数==>" + date);
    System.out.println("data传递参数==>" + date1);
    System.out.println("data传递参数==>" + date2);
    return "{'module':'data param'}";
}

类型转换器

  • Converter接口,这是日期转换的具体接口,可以自行深入理解,这里只是概述
public interface Converter<S,T>{
    @Nullable
    T convert(S var1);
}
    • 请求参数年龄数据(String -> Integer)
    • 日期格式转换(String ->Date)
  • EnableWebMvc功能之一:根据类型匹配对应的类转化器,必须打开,即在SpringConfig.java中添加注解(之前已添加)

响应

  • 详见代码注释部分,讲解了对应的知识点,与实例代码如下:
@Controller
public class UserController {

    //响应页面/跳转页面
    //在Spring中只要返回字符串,字符串为页面名称就可以直接跳转
    @RequestMapping("/toJumpPage")
    public String toJumopage() {
        System.out.println("跳转页面");
        return "page.jsp";
    }

    //响应文本数据
//    @ResponseBody注解表示将函数的返回值返回一个字符串,而不是JSON,默认是页面
    @RequestMapping("/toText")
    @ResponseBody
    public String toText() {
        System.out.println("返回纯文本数据");
        return "response text";
    }

    //响应POJO对象--Json数据
//    @ResponseBody注解--函数返回值是POJO类,Jackson会帮助我们返回json
    @ResponseBody
    @RequestMapping("/toJsonPOJO")
    public User toJsonPOJO() {
        System.out.println("返回json对象数据");
        User user = new User();
        user.setUsername("张三");
        user.setAge(18);
        return user;
    }

    //响应POJO集合对象,与上面的相同
    @ResponseBody
    @RequestMapping("/toJsonList")
    public List<User> toJsonList() {
        System.out.println("返回json对象集合数据");
        User user1 = new User();
        user1.setUsername("张三");
        user1.setAge(18);
        User user2 = new User();
        user2.setUsername("张三");
        user2.setAge(18);

        List<User> list = new ArrayList();
        list.add(user1);
        list.add(user2);

        return list;
    }
}

相关注释说明:

  • 名称:@ResponseBody
  • 类型:方法注解
  • 位置:SpringMVC控制器方法定义上方
  • 作用:设置当前控制器返回值作为响应体,String->文本,集合与POJO转换为JSON
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值