gpt4 book ai didi

java - Dropwizard REST 问题

转载 作者:行者123 更新时间:2023-12-02 02:16:08 26 4
gpt4 key购买 nike

我正在使用 dropwizard (jersey, jackson) 创建 REST API,并偶然发现了一些我似乎无法找到答案的问题。我想基于 json 文件构建一个 sql 查询。这可以通过 map (标准、值)来完成。我在实现这一点时遇到一些问题:

  • 调用 DAO 方法 getUserByCriteria(Map/JSONObject) 会出现此类错误:UnsupportedOperationException:找不到已删除类型“接口(interface) java.util.Map[K,V]”的类型参数。要绑定(bind)泛型类型,最好使用bindByType。或“无参数工厂”错误,我似乎无法重现 atm

代码:

用户资源:

@POST
@Path("/list")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public List<User> getUser(@Auth UserToken token, JSONObject json) {
return userDAO.getUserByCriteria(json);
}

用户道:

List<User> getInvoiceByCriteria(@Bind("json") JSONObject json);
  • 当我确实让它发挥作用时,我将如何去做?我的代码如下所示(似乎无法获取为此代码块格式化的代码块):

    @SqlQuery("SELECT * FROM user LIMIT 10")

    @RegisterRowMapper(UserMapper.class)

    列表 getUserByCriteria(@Bind("json") 映射 json);

我想让它做这样的事情:

@SqlQuery("SELECT * FROM user WHERE crit1 = :crit1 AND crit2 = :crit2 LIMIT 10")
@RegisterRowMapper(UserMapper.class)
List<User> getUserByCriteria(@Bind("json") Map json){
//EXTRACT VALUES OF MAP HERE
//
};

我意识到这是一个相当模糊的问题。问题是我在 REST 方面是个菜鸟,而且我遇到的问题并不常见(或者我正在寻找错误的东西)。非常感谢任何帮助/见解!

关于 http/rest 的额外问题:我觉得这应该是 GET 请求而不是 POST,但我的高级 Rest 客户端不允许 GET 请求中包含正文。我在网上发现这通常是不这样做的,但是允许的。这里使用 POST 可以吗?

最佳答案

这是使用 Mapper 的 DAO 接口(interface)的简单示例:

@RegisterMapper(EmployeeMapper.class)
public interface EmployeeDao {

@SqlQuery("select * from employee;")
public List<Employee> getEmployees();

@SqlQuery("select * from employee where id = :id")
public Employee getEmployee(@Bind("id") final int id);

@SqlUpdate("insert into employee(name, department, salary) values(:name, :department, :salary)")
void createEmployee(@BindBean final Employee employee);

@SqlUpdate("update employee set name = coalesce(:name, name), " +
" department = coalesce(:department, department), salary = coalesce(:salary, salary)" +
" where id = :id")
void editEmployee(@BindBean final Employee employee);

@SqlUpdate("delete from employee where id = :id")
int deleteEmployee(@Bind("id") final int id);

@SqlQuery("select last_insert_id();")
public int lastInsertId();
}

这是上面使用的 Employee Mapper 类:

public class EmployeeMapper implements ResultSetMapper<Employee> {
private static final String ID = "id";
private static final String NAME = "name";
private static final String DEPARTMENT = "department";
private static final String SALARY = "salary";

public Employee map(int i, ResultSet resultSet, StatementContext statementContext)
throws SQLException {
Employee employee = new Employee(resultSet.getString(NAME), resultSet.getString(DEPARTMENT),resultSet.getInt(SALARY));
employee.setId(resultSet.getInt(ID));
return employee;
}
}

我在博客文章中解释了如何使用 JDBI、在 Dropwizard 中通过简单步骤创建 REST API,并且我还在 GitHub 上创建了一个示例工作应用程序。请查看:http://softwaredevelopercentral.blogspot.com/2017/08/dropwizard-mysql-integration-tutorial.html

关于java - Dropwizard REST 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49274193/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com