Springboot错误解决:Oracle Timestamp转Date异常
1. 创建自定义Handler类处理时间格式
@MappedTypes({Object.class})
@MappedJdbcTypes(value = {JdbcType.TIMESTAMP})
public class MyObjectTypeHandler extends BaseTypeHandler<Object> {
public MyObjectTypeHandler() {
}
@Override
public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
ps.setObject(i, parameter);
}
@Override
public Object getNullableResult(ResultSet rs, String columnName) throws SQLException {
Object result = rs.getObject(columnName);
return rs.wasNull() ? null : dealResult(result);
}
@Override
public Object getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
Object result = rs.getObject(columnIndex);
return rs.wasNull() ? null : dealResult(result);
}
@Override
public Object getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
Object result = cs.getObject(columnIndex);
return cs.wasNull() ? null : dealResult(result);
}
/**
* 为了解决错误:
* 26-Sep-2018 14:21:06.634 WARNING [http-apr-8080-exec-6] org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.handleHttpMessageNotWritable Failed to write HTTP message: org.springframework.http.converter.HttpMessageNotWritableException:
* Could not write JSON: No serializer found for class java.io.ByteArrayInputStream and no properties discovered to create BeanSerializer
* (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS);
* nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class java.io.ByteArrayInputStream and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
* (through reference chain: java.util.HashMap["pageData"]->java.util.ArrayList[0]->java.util.HashMap["UPDATE_TIME"]->oracle.sql.TIMESTAMP["stream"])
* @param result
* @return
* @throws SQLException
*/
private Object dealResult(Object result) throws SQLException {
if (result instanceof TIMESTAMP) {
return new Date(((TIMESTAMP) result).dateValue().getTime());
} else if (result instanceof DATE) {
return new Date(((DATE) result).dateValue().getTime());
} else if (result instanceof TIMESTAMPLTZ) {
return new Date(((TIMESTAMPLTZ) result).dateValue().getTime());
} else if (result instanceof TIMESTAMPTZ) {
return new Date(((TIMESTAMPTZ) result).dateValue().getTime());
} else{
return result;
}
}
}
2. 在配置中指向该类所在文件夹
# 笔者用的是mybatis-plus
mybatis-plus:
type-handlers-package: com.lvm.common.config
# 如果是mybatis则用以下配置
mybatis:
type-handlers-package: com.lvm.common.config
至此该转换错误异常应当已解决