java - 在 Dropwizard 中使用 JDBI Mapper 注释和构造函数

标签 java dropwizard jdbi

我正在使用 Dropwizard 1.0.0 和 JDBI 2.73。 我想用一些对象创建一个映射器。因此,一个带有一些参数的构造函数。

但它抛出异常:

java.lang.NoSuchMethodException: com.xyz.db.ReportMapper.<init>()

创建了 DAO

@SqlQuery("SELECT * FROM reports")
@Mapper(ReportMapper.class)
List<Report> findReports();

映射器已创建。

public class ReportMapper implements ResultSetMapper<Report> {
    private static final String ID_COLUMN = "id";
    private static final String NAME_COLUMN = "name";
    private static final String START_DATE_COLUMN = "start_date";
    private static final String END_DATE_COLUMN = "end_date";

    private final ObjectMapper mapper;

    public ReportMapper(ObjectMapper objectMapper){
        this.mapper = objectMapper;
    }

    @Override
    public Report map(int index, ResultSet resultSet, StatementContext statementContext) throws SQLException {

        return Report.builder()
            .id(resultSet.getInt(ID_COLUMN))
            .name(resultSet.getString(NAME_COLUMN))
            .startDate(resultSet.getDate(START_DATE_COLUMN))
            .endDate(resultSet.getDate(END_DATE_COLUMN))
            .build();
    }

如何创建带有构造函数的映射器并将其用作注释?

最佳答案

正如 Manikandan 所建议的,当使用 @Mapper 时,该类必须有一个无参数的构造函数。

不过,你可以自己注册一个ResultSetMapper,没有这个限制,例如:

dbi.registerMapper(new ReportMapper(new ObjectMapper()));

关于java - 在 Dropwizard 中使用 JDBI Mapper 注释和构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39644796/

相关文章:

Tomcat 上的 Java NullPointEreException

java - JPA 中的缓存(Eclipselink + Dropwizard + MySQL)

Java + MySQL + 内联用户变量 : Same query works in SQL editor, JDBD 中的错误结果 (org.skife.jdbi)

java - MySql - 一对多连接,将带有 JDBI 的 JOIN 映射到列表

java - 数据库表中的实体类

java - 是否可以编写一个方法来接受不同抽象的通用参数?

java - 什么工具可以为动态创建的查询建议索引和覆盖索引?

java - 在 DropWizard 中使用 REST API

java - 在 dropwizard 中使用 cometd

java - 如何使用jdbi和dropwizard使用@Transaction实现提交和回滚