【问题标题】:java.lang.IllegalArgumentException: number of arguments must be even at org.javalite.activejdbc.Model.setjava.lang.IllegalArgumentException:参数的数量必须是偶数在 org.javalite.activejdbc.Model.set
【发布时间】:2017-03-24 21:42:22
【问题描述】:

请求正文:

request.body {"username":"kkk.k999@gmail.com","userImage":"https://lh3.googleusercontent.com/-XdUIqdMkffA/AAAAAAAAAAI/AAAAAAAAAAA/4252rscbv5M/photo.jpg?sz=50","role":"ROLE_USER","token":"ya29.GmIYBNhh5zs2Cpq1UI2iVzdxDvMVf2x8ggpEgM9Jvk51f5FOGodUZINrabY6K9Mhn6L82XpUhOyh5uIPhLZkAjIqS1hBu7un9QhMzRW35
RJM5ZwFozlBIuuxFRP4Y5xsTtdPGw"}

保存到 Db 时出错:

@Override
public void saveUserInfo(Request request) {
    Base.open("com.mysql.jdbc.Driver", "jdbc:mysql://localhost/47seconds", "root", "admin");
    ObjectMapper mapper = new ObjectMapper();
    try {
        UserInfo userInfo = mapper.readValue(request.body(), UserInfo.class);

        userInfo.set(userInfo.getUsername());
        userInfo.set(userInfo.getUserImage());
        userInfo.set(userInfo.getRole());
        userInfo.set(userInfo.getToken());

        userInfo.saveIt();

    } catch (IOException ex) {
        Logger.getLogger(UserServiceImpl.class.getName()).log(Level.SEVERE, null, ex);
    }
    Base.close();
}

错误: java.lang.IllegalArgumentException:org.javalite.activejdbc.Model.set 处的参数数量必须是偶数

模型类和数据库中的参数数量匹配。数据库中的 id 是自动递增的,所以我没有从代码中传递它。

模型类:

@Table("user_info")
public class UserInfo extends Model {

    private String username;
    private String userImage;
    private String token;
    private String role;

    /**
     * @return the username
     */
    public String getUsername() {
        return username;
    }

    /**
     * @param username the username to set
     */
    public void setUsername(String username) {
        this.username = username;
    }

    /**
     * @return the userImage
     */
    public String getUserImage() {
        return userImage;
    }

    /**
     * @param userImage the userImage to set
     */
    public void setUserImage(String userImage) {
        this.userImage = userImage;
    }

    /**
     * @return the token
     */
    public String getToken() {
        return token;
    }

    /**
     * @param token the token to set
     */
    public void setToken(String token) {
        this.token = token;
    }

    /**
     * @return the role
     */
    public String getRole() {
        System.out.println("printing role "+ role);
        return role;
    }

    /**
     * @param role the role to set
     */
    public void setRole(String role) {
        this.role = role;
    }

}

【问题讨论】:

    标签: java activejdbc javalite


    【解决方案1】:

    您对 ActiveJDBC API 的使用不正确。

    1. 不需要注解@Table,因为你的模型名对应一个表名
    2. 不需要声明属性
    3. 你调用了错误的方法set
    4. 你有意大利面条代码userInfo.set(userInfo.getUsername()); - 你正在将数据从一个对象设置到同一个对象??????

    您的模型需要(整体):

    public class UserInfo extends Model {}
    

    这就是你所需要的。

    如果您需要在模型上设置值,您可以:

    userInfo.set("user_name", userName); 
    

    等等。

    我建议您阅读文档并尝试自己解决问题,因为您的问题表明您缺乏努力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-24
      相关资源
      最近更新 更多