常见前后端交互错误总结(一)

本文总结了SpringMVC框架中常见的前后端交互问题,包括@RequestParam参数传递的问题及其解决方案,以及RESTful风格参数传值的细节和优化。在RESTful实践中,强调了使用对象接收参数的好处和避免参数过多的建议。此外,还提及了在项目中遇到的Spring Security配置错误及虚拟机网络问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringMVC框架部分

#知识回顾

问题一:传参出现问题

SpringMVC中的参数传递-@RequestParam

  • 需求: 如果遇到提交的参数名称和方法中参数名称不一致时,则建议使用注解获取数据.
  • 注解的属性
    • value/name
    • required 该参数必须传递 true false
    • defaultValue 添加默认值
/*
    * http://localhost:8080/springmvc/user/findUser?id=100&name=tomcat
    * 下述代码解释:
    *	SringMVC注解写法:@RequestParam(value = "id",required = true) int 	 *						userId:
    *	常规代码接收参数:
    *				int id = Integer.parseInt(request.getParameter("id"));
    *   			int userId = id;
    */
@RequestMapping("/findUser")
public ModelAndView findUserParam(
    @RequestParam(value = "id",required = true) int userId,
    @RequestParam(value = "name",required = false,defaultValue="admin123") String username){
    System.out.println("获取用户提交的数据:"+userId+":"+username);
    return new ModelAndView("index");
}
问题二,参数传值-RestFul

SpringMVC参数传值-RestFul结构

  • 说明:

    • 查询: http://localhost:8080/springmvc/getUser?id=100&name=tomcat&age=18&sex=女
    • 目的: 实现数据的传递 同时减少代码
    • 页面参数的写法:
      • 不写请求的参数 只写参数的值
      • 为了保证数据顺序有效 则使用 / 分割
      • 当参数的位置确定之后 不能随意修改
    GET类型http://localhost:8080/springmvc/user/100/tomcat/18/
    • 后端参数接收
      • @PathVariable 作用: 接收url地址中的参数
    @GetMapping("/resultFul/{userId}/{name}/{age}/{sex}")
    public ModelAndView resultFul(
           @PathVariable("userId") int id,
           @PathVariable String name,
           @PathVariable int age,
           @PathVariable String sex) throws Exception {
        System.out.println("参数:"+name+":"+sex);
        return new ModelAndView("index");
    }
    
    • 注意事项: 如果请求的参数较多 则不建议使用restFul结构.

    • 代码优化

      • 如果提交的参数与对象中的属性名称一致,则可以利用对象接收参数
    @GetMapping("/resultFul/{userId}/{name}/{age}/{sex}")
    public ModelAndView resultFul2(User user) throws Exception {
        System.out.println(user);
        return new ModelAndView("index");
    }
    

    总结:

    • 使用restFul的风格参数不会随请求方式的变化而改变
    • 利用RestFul的风格 可以屏蔽关键字 降低对外暴漏的概率
    • 将具体的参数拼接到URL中 节省了字节的传递.
    • 比较直观不容易被爬虫捕获.

项目

 # 问题描述:创建对象为null值,再为对象赋null值(严重错误)
  •  此处问题严重,以后特别注意
    
@Override
    public void publish(Long id, Integer status) {
        House house = new House();
        /*id = house.getId();
        house.setId(id);*/
        /**
         * 上述代码严重错误,以后特别注意:
         * 注意:创建house对象后,所有值都为null,
         *      不能在从house对象中在拿出来一个null值,然后再给id赋个null值。此问题特别注意
         *
         *      应将创过来的值通过setId方法给id赋值
         */
        house.setId(id);
        house.setStatus(status);
        houseDao.publish(house);
    }
# 写配置类(Spring Security集成与入门)
  • 问题1

    问题位置:shf(二手房管理项目当中,项目的认证与登录验证)

    在配置Spring Security中,使用java类配置一定要让java配置类也需要被扫描到

    配置类文件位置:shf-parent\web\web-admin\src\main\java\com\atguigu\config\WebSecurityConfig.java

    ​ 错误示例:自己写的配置类没有被springmvc配置文件扫描到

    <!--包扫描-->
        <context:component-scan base-package="com.atguigu.controller" />
    

    ​ 正确写法:

    <!--一定要扫描到java配置类,否则不生效-->
    <!--包扫描-->
        <context:component-scan base-package="com.atguigu" />
    

虚拟机、linux等

VMware中有网络,但虚拟机无法ping到外网。(示例:ping百度网址)
请添加图片描述
注意:这四个服务是否开启

请添加图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值