我正在使用 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/