请求参数默认值多种实现方式

1、直接赋值

    /**
     * 当前页码
     */
    private int pageNum  = 1;

    /**
     * 每页条数
     */
    private int pageSize = 10;

2、使用切面实现默认值

自定义注解

/**
 * @BelongsProject: spring-boot-self-exercise
 * @BelongsPackage: com.geekmice.springbootselfexercise.annotation
 * @Author: pingmingbo
 * @CreateTime: 2023-08-25  17:04
 * @Description: 分页参数默认值
 * @Version: 1.0
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface IntDefaultValue {
}

切面类

package com.geekmice.springbootselfexercise.aspect;

import com.geekmice.springbootselfexercise.param.TzAreaParam;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

/**
 * @BelongsProject: spring-boot-self-exercise
 * @BelongsPackage: com.geekmice.springbootselfexercise.aspect
 * @Author: pingmingbo
 * @CreateTime: 2023-08-25  17:05
 * @Description: 默认值切面
 * @Version: 1.0
 */
@Component
@Aspect
@Slf4j
public class IntDefaultValueAspect {

    /**
     * 分页参数默认值
     * @param point
     * @return
     * @throws Throwable
     */
    @Around("@annotation(com.geekmice.springbootselfexercise.annotation.IntDefaultValue)")
    public Object setIntValue(ProceedingJoinPoint point) throws Throwable {
        Object[] parameters = point.getArgs();
        for (Object arg : parameters) {
            if (arg instanceof TzAreaParam) {
                TzAreaParam temp = (TzAreaParam) arg;
                if (0 == temp.getPageNum() || 0 == temp.getPageSize()) {
                    temp.setPageNum(1);
                    temp.setPageSize(10);
                }
            }
        }
        Object proceed = point.proceed();
        return proceed;
    }
}

控制层使用

    /**
     * 分页查询
     *
     */
    @GetMapping("listPage")
    @MethodExporter
    @ApiOperation(value = "分页查询")
    @IntDefaultValue
    public AjaxResult listPage(@Valid TzAreaParam param) {
        log.info("分页查询 param : [{}]" , param);
        PageInfo<TzArea> result = tzAreaService.listPage(param);
        return AjaxResult.success(result);
    }

效果展示

使用前

2023-09-05 09:19:03.654 INFO 39792 — [nio-8081-exec-4] c.g.s.controller.TzAreaController : 分页查询 param : [TzAreaParam(areaId=null, areaName=北京市, parentId=null, level=null, pageNum=1, pageSize=1, count=0)]

使用后

2023-09-05 09:19:26.558 INFO 39792 — [nio-8081-exec-1] c.g.s.controller.TzAreaController : 分页查询 param : [TzAreaParam(areaId=null, areaName=北京市, parentId=null, level=null, pageNum=1, pageSize=10, count=0)]

3、使用过滤器Filter实现

注意:启动类加上注解@ServletComponentScan,使用过滤器,监听器,拦截器都可以交给spring容器管理。

自定义请求体

package com.geekmice.springbootselfexercise.param;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;

/**
 * @BelongsProject: spring-boot-self-exercise
 * @BelongsPackage: com.geekmice.springbootselfexercise.param
 * @Author: pingmingbo
 * @CreateTime: 2023-09-05  09:41
 * @Description: TODO
 * @Version: 1.0
 */

public class MyRequestWrapper extends HttpServletRequestWrapper {

    private Map params = new HashMap<>();

    public MyRequestWrapper(HttpServletRequest request, Map newParams) {
        super(request);
        if (request.getParameterMap() != null) {
            this.params.putAll(request.getParameterMap());
        }
        if (newParams != null) {
            this.params.putAll(newParams);
        }
    }

    //主要覆盖这个方法来获取新的参数对象
    @Override
    public Map getParameterMap() {
        return params;
    }

    @Override
    public String[] getParameterValues(String name) {
        Object v = params.get(name);
        if (v == null) {
            return null;
        } else if (v instanceof String[]) {
            return (String[]) v;
        } else if (v instanceof String) {
            return new String[]{(String) v};
        } else {
            return new String[]{v.toString()};
        }
    }

    /**
     * 根据参数的key获取参数
     *
     * @param name
     * @return
     */
    @Override
    public String getParameter(String name) {
        Object v = params.get(name);
        if (v == null) {
            return null;
        } else if (v instanceof String[]) {
            String[] strArr = (String[]) v;
            if (strArr.length > 0) {
                return strArr[0];
            } else {
                return null;
            }
        } else if (v instanceof String) {
            return (String) v;
        } else {
            return v.toString();
        }
    }

    public Enumeration getParameterNames() {
        Vector l = new Vector(params.keySet());
        return l.elements();
    }
}

自定义过滤器

package com.geekmice.springbootselfexercise.filter;

import com.geekmice.springbootselfexercise.param.MyRequestWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.annotation.Configuration;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * @BelongsProject: spring-boot-self-exercise
 * @BelongsPackage: com.geekmice.springbootselfexercise.filter
 * @Author: pingmingbo
 * @CreateTime: 2023-09-05  09:27
 * @Description: 修改分页参数默认值
 * @Version: 1.0
 */
@Configuration
@Slf4j
@WebFilter(filterName = "authFilter", urlPatterns = {"/tzArea"})
public class InitValueFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        log.info("过滤器开始初始化 : [{}]" , filterConfig);
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
        String pageSize = httpServletRequest.getParameter("pageSize");
        String pageNum = httpServletRequest.getParameter("pageNum");
        if(StringUtils.isAnyBlank(pageSize,pageNum)){
            pageSize="11";
            pageNum="1";
            Map<String,Object> map = new HashMap(16);
            map.put("pageSize", pageSize);
            map.put("pageNum", pageNum);
            MyRequestWrapper myRequestWrapper = new MyRequestWrapper(httpServletRequest, map);
            chain.doFilter(myRequestWrapper, response);
        }


    }

    @Override
    public void destroy() {
        log.info("过滤器销毁");
    }
}

效果

2023-09-05 10:08:51.174 INFO 14824 — [nio-8081-exec-9] c.g.s.controller.TzAreaController : 分页查询 param : [TzAreaParam(areaId=null, areaName=1, parentId=null, level=null, pageNum=1, pageSize=11, count=0)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: http请求默认值是在使用jmeter进行多个接口测试时,为了避免重复配置协议、服务器名称或IP、端口等参数设置的。它可以将这些重复的配置规整在一起,后续的元件会继承默认值中的参数,从而减少了重复配置的工作量。\[1\]而http请求是指发送HTTP请求到服务器以获取响应的过程。在HTTP协议中,有多种请求方法,如GET、POST、HEAD等。这些方法用于不同的目的,比如获取内容、提交数据、获取响应头信息等。\[2\]所以,http请求默认值是用来配置请求的默认参数,而http请求是具体发送请求的动作。它们是不同的概念。 #### 引用[.reference_title] - *1* [http请求默认值](https://blog.csdn.net/B15025311845/article/details/127323914)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [基础知识:HTTP协议以及GET请求和POST请求的区别](https://blog.csdn.net/qq_34556414/article/details/127693161)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值