排期明细提交时前后端参数传递处理方法

一、基础参数传递流程

1.1 前端Vue组件定义

export default {
  data() {
    return {
     queryParams: {
                productName: '',
                requirementId: '',
                domainePerson: '',
                reqState:'',
      },
    }
  }
}

1.2 请求发送方法

methods: {
    [CRUD.HOOK.beforeRefresh]() {
     // 构建符合后端接收格式的扁平化参数
     const params = {
       productName: this.queryParams.productName || undefined,
       domainePerson: this.queryParams.domainePerson || undefined,
       requirementId: this.queryParams.requirementId || undefined,
       reqState: this.queryParams.reqState || undefined,
       ...this.crud.page
     }
     Object.keys(params).forEach(key => {
       if (params[key] === undefined || params[key] === '') {
         delete params[key]
       }
     })

     this.crud.params = params
     return true
   }
}

二、后端Controller接收

2.1 基础接收方式

@GetMapping("/api/schedules")
public ResponseEntity<PageResult<Schedule>> querySchedules(
    @RequestParam(required = false) String productName,
        @RequestParam(required = false) String domainePerson,
        @RequestParam(required = false) String requirementId,
        @RequestParam(required = false) Integer reqState,
        Page<Object> page) {

            ScheduleQueryCriteria criteria = new ScheduleQueryCriteria();
            Schedule schedule = new Schedule();
            schedule.setProductName(productName);
            schedule.setDomainePerson(domainePerson);
            if(reqState!=null)
            {   schedule.setReqState(reqState);}
            if(requirementId!=null) {
                schedule.setRequirementId(Long.parseLong(requirementId));
            }
            criteria.setSchedule(schedule);

        return new ResponseEntity<>(scheduleService.queryAll(criteria, page), HttpStatus.OK);
}

三、MyBatis处理参数

3.1 Mapper接口定义

@Mapper
public interface ScheduleMapper extends BaseMapper<Schedule> {
IPage<Schedule> queryAll(@Param("criteria") ScheduleQueryCriteria criteria, Page<Object> page);
}

3.2 XML映射配置

<select id="queryAll" resultMap="BaseResultMap">
        select
        s.schedule_id,
        s.version_number,
        s.people_involved,
        s.recipients,
        s.comment,
        s.product_name AS productName,
        s.requirement_id AS requirementId,
        r.req_name AS requirementName,
        r.req_state AS reqState,
        s.domaine_person AS domainePerson,
        s.online_date AS onlineDate
        from mnt_schedule s
        LEFT JOIN
        mnt_requirement r  ON s.requirement_id = r.req_id
        <where>
            <if test="criteria != null">
                <if test="criteria.schedule.productName!= null">
                    and s.product_name = #{criteria.schedule.productName}
                </if>
                <if test="criteria.schedule.domainePerson!= null">
                    and s.domaine_person = #{criteria.schedule.domainePerson}
                </if>
                <if test="criteria.schedule.requirementId!= null">
                and s.requirement_id = #{criteria.schedule.requirementId}
                </if>
                <if test="criteria.schedule.reqState!= null">
                    and r.req_state = #{criteria.schedule.reqState}
                </if>
            </if>
        </where>
        ORDER BY r.req_state ASC, s.schedule_id DESC
    </select>

四、参数处理规范

前端传参格式 后端接收方式 MyBatis处理方式
?productName=测试 @RequestParam String productName #{productName}
?id=1,2,3 @RequestParam List<Long> ids <foreach collection="ids">
无参数 不声明参数 无条件查询

五、调试与验证

5.1 前端调试方法

// 打印实际请求URL
console.log('请求参数:', this.$axios.getUri({ params }))

5.2 后端日志配置

logging:
  level:
    com.example.mapper: DEBUG

5.3 常见问题排查

  1. 参数未接收到

    • 检查URL参数名与@RequestParam名称是否一致
    • 验证参数是否被URL编码
  2. SQL执行异常

    • 检查MyBatis日志中的完整SQL
    • 验证表字段名与实体类映射关系
  3. 空值处理问题

    • 前端过滤空字符串参数
    • 后端使用required = false

六、最佳实践建议

  1. 命名规范

    • 保持前后端参数命名一致(推荐全小写+下划线)
    • 数据库字段与实体类属性明确映射
  2. 参数处理

    • 字符串参数统一trim处理
    • 数值型参数做范围校验
    • 敏感字段需要脱敏
  3. 代码风格

    • 简单查询直接使用基本参数
    • 超过3个参数建议使用对象封装
    • 保持Mapper接口与XML的对应关系清晰
posted @ 2025-07-02 10:18  金色新星  阅读(11)  评论(0)    收藏  举报