从零构建轻量级Java Web框架 互动版

请求参数

通常前端通过form表格的形式向后台发送数据,需要一个类封装从HttpServletRequest请求对象中获取所有的参数,然后传递给处理方法。首先解析请求参数(form表单数据),将其封装成Param类中,传递给Controller的方法处理。

通过request.getParameterNames()将发送请求页面中form表单所具有name属性的表单对象获取,request.getParameterValues(name)获取其值,生成FormParam保存在Param中。

/**
 * 解析请求参数,form表单数据
 */
public class ParameterUtil {

    public static Param createParam(HttpServletRequest request) throws IOException {
        return new Param(parseParameterNames(request));
    }

    private static Map<String,Object> parseParameterNames(HttpServletRequest request) {
        Map<String,Object> formParams = new HashMap<>();
        //将发送请求页面中form表单所具有name属性的表单对象获取
        Enumeration<String> paramNames = request.getParameterNames();
        while (paramNames.hasMoreElements()) {
            String fieldName = paramNames.nextElement();
            String[] fieldValues = request.getParameterValues(fieldName);
            if (ArrayUtil.isNotEmpty(fieldValues)) {
                Object fieldValue;
                if (fieldValues.length == 1) {
                    fieldValue = fieldValues[0];
                } else {
                    StringBuilder sb = new StringBuilder("");
                    for (int i = 0; i < fieldValues.length; ++i) {
                        sb.append(fieldValues[i]);
                        if (i != fieldValues.length - 1) {
                            sb.append(StringUtil.separator);
                        }
                    }
                    fieldValue = sb.toString();
                }
                formParams.put(fieldName,fieldValue);
            }
        }
        return formParams;
    }

}


Param请求参数对象,封装了前端提交的form表格数据。

/**
 * 请求参数对象
 */
public class Param {

    private Map<String,Object> formParams;

    public Param(Map<String,Object> formParams) {
        this.formParams = formParams;
    }

    /**
     * 判断参数是否为空
     *
     * @return boolean
     */
    public boolean isEmpty() {
        return CollectionUtil.isEmpty(formParams);
    }

    public Map<String, Object> getFormParams() {
        return formParams;
    }

    /**
     * 根据参数名取String型参数值
     *
     * @param name
     * @return
     */
    public String getString(String name) {
        return CastUtil.castString(formParams.get(name));
    }

    public double getDouble(String name) {
        return CastUtil.castDouble(formParams.get(name));
    }

    public long getLong(String name) {
        return CastUtil.castLong(formParams.get(name));
    }

    public int getInt(String name) {
        return CastUtil.castInt(formParams.get(name));
    }

    public Boolean getBoolean(String name) {
        return CastUtil.castBoolean(formParams.get(name));
    }

}