在进行类型转换时出现NumberFormatException

用户在前端界面的进行添加用户,表单中所有的字段都填了1,但是点击确认后控制台输出以下错误:

java.lang.NumberFormatException: For input string: ""

初步判断是表单中的数据和对象中的不一致,但是我检查后发现没有不一致,下面是前端表单的源码:

<div class="formbody">

    <div class="formtitle"><span>基本信息span>div>
    <form action="/userServlet" method="post">
        <ul class="forminfo">
            <input type="hidden" name="type" value="save">
            <c:if test="${not empty user}">c:if>
            <input type="hidden" name="id" value="${user.id}">
            <li>
                <label>账号label>
                <input name="username" type="text" class="dfinput" value = "${user.username}" onkeyup="this.value=this.value.replace(/[\u4e00-\u9fa5]+/g,'')" />
                <i>账号必须是英文或者数字,禁止输入中文字符,输入中文字符会被移除i>
            li>
            <li>
                <label>密码label>
                <input name="password" type="text" class="dfinput" value = "${user.password}"/>
                <i>nulli>
            li>
            <li>
                <label>手机label>
                <input name="phoneNum" type="text" class="dfinput" value = "${user.phoneNum}" onkeyup="this.value=this.value.replace(/\D/g,'')" maxlength="15"/>
                <i>不能超过15个字符i>
            li>
            <li>
                <label>邮箱label>
                <input name="email" type="text" class="dfinput" value = "${user.email}"/>
                <i>nulli>
            li>
            <li>
                <label> label>
                <input name="" type="submit" class="btn" value="确认保存"/>
            li>
        ul>
    form>


实体类中的:


```java
public class User {

    private Integer id;//用户id
    private String username;//定义用户账号
    private String password;// 用户密码
    private String phoneNum;// 用户手机
    private String email;// 用户邮箱
    private Integer isDelet;//用户状态是否删除 del=0 undel=1
    private String salt;//加密盐值(测试)
    private String userident;//用户属性,管理员和一般查看用户。

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", phoneNum='" + phoneNum + '\'' +
                ", email='" + email + '\'' +
                ", isDelet=" + isDelet +
                ", salt='" + salt + '\'' +
                ", userident='" + userident + '\'' +
                '}';
    }


原先的想法是使用反射器获取所有字段到类中,报错位置在下边的代码中已经标注

```java
 private  T getRequestParameterForReflect(HttpServletRequest req, Class cls ) throws Exception {
        T t = cls.newInstance();
        Map[]> parameterMap = req.getParameterMap();



        Field[] declaredFields = cls.getDeclaredFields();
        if(declaredFields != null && declaredFields.length > 0){
            for (Field declaredField : declaredFields) {
                String[] values = parameterMap.get(declaredField.getName());

                if(values == null || values.length == 0){
                    System.out.println(values + "Extar");
                    continue;
                }
                if(declaredField.getType() == String[].class){
                    //判断是否是数组
                    declaredField.setAccessible(true);//放开访问权限
                    try {
                        declaredField.set(t, values);
                    }catch (IllegalAccessException e){
                        e.printStackTrace();
                    }
                    declaredField.setAccessible(false);
                    continue;
                }
                //对id进行数值转换,转换为String
                //报错位置
                if(declaredField.getType() == Integer.class){
                    try {
                        declaredField.set(t, Integer.parseInt(values[0]));//报错位置
                    }catch (IllegalAccessException e){
                        e.printStackTrace();
                    }
                    declaredField.setAccessible(false);
                    continue;

                }
                //报错位置
                //普通数据
                declaredField.setAccessible(true);//放开访问权限
                try {
                    declaredField.set(t, values[0]);
                }catch (IllegalAccessException e){
                    e.printStackTrace();
                }
                declaredField.setAccessible(false);
                continue;

            }

        }
        return t;
    }

如果不进行类型转换那么id就没法转换成string,也试过用values[0].toString,但是没有效果。
我是跟着网上的教程做的,两天了还没解决问题。第一次搞这个,也找过很多方法都无法解决,或许是有些地方有问题我看不出来

不是数值就会转换出错

解决了,靠。。。原来是前端的if逻辑写错导致id没有传出来。。。。。