所以,我试图建立一个报告。某些特定类型的用户的详细信息需要写在excel文件中。在到达endpoint时,它返回500,并使用以下StackTrace。
java.lang.ClassCastException: class java.util.LinkedHashMap cannot be cast to class java.lang.String (java.util.LinkedHashMap and java.lang.String are in module java.base of loader 'bootstrap')
at com.clever.bas.util.Helpers.lambda$writeToExcel$0(Helpers.java:73)
at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721)
at com.clever.bas.util.Helpers.lambda$writeToExcel$1(Helpers.java:64)
public static InputStream writeToExcel(Stream<UserProfile> data) throws Exception {
// final Map<String, Transaction> transaction = data.collect(Collectors.toMap(Transaction::getId, Function.identity()));
// System.out.println(transaction + " +++++>>>>>>");
//Blank workbook
try (XSSFWorkbook workbook = new XSSFWorkbook()) {
//Create a blank sheet
XSSFSheet sheet = workbook.createSheet("transaction report");
AtomicInteger rowNum = new AtomicInteger(1);
AtomicBoolean isHeaderSet = new AtomicBoolean(false);
data.forEach(userProfile -> {
if (!isHeaderSet.get()){
createHeader(userProfile, sheet);
isHeaderSet.set(true);
}
XSSFRow row = sheet.createRow(rowNum.getAndIncrement());
ObjectMapper mapObject = new ObjectMapper();
Map<String, Object> mapObj = mapObject.convertValue(userProfile, Map.class);
AtomicInteger cellNum = new AtomicInteger();
mapObj.forEach((key, value) -> {
XSSFCell cell = row.createCell(cellNum.getAndIncrement());
cell.setCellValue(key);
if (value instanceof Integer)
cell.setCellValue((Integer) value);
else if (value instanceof BigDecimal)
cell.setCellValue(((BigDecimal) value).doubleValue());
else if (value instanceof Long)
cell.setCellValue((Long) value);
else cell.setCellValue((String) value);
});
});
public class UserProfile {
@Id
@ObjectId
private String id;
@JsonFormat(pattern="yyyy-MM-dd'T'HH:mm:ssZ")
private final Date createdAt = new Date(System.currentTimeMillis());
@JsonFormat(pattern="yyyy-MM-dd'T'HH:mm:ssZ")
private final Date updatedAt = new Date(System.currentTimeMillis());
private String agentId;
@NotBlank
private String firstName;
@NotBlank
private String lastName;
@NotBlank
@Email(message="Invalid email Address")
private String email;
@NotBlank
@Size(min=11, max=14)
private String phoneNumber;
private String businessName;
@Size(min=11, max=11)
private String bvn;
@Size(min=11, max=11)
private String nin;
@URL
private String profilePicture;
@URL
private String utilityBill;
@URL
private String identityCard;
private RoleGroup roleGroup;
@Embedded
private List<Role> roles;
@ObjectId
@JsonIgnore
private List<String> roleIds;
private String userType; // STAFF, AGENT, AGGREGATOR, PROSPECT
public Types.Gender gender;
private String referralCode;
private String referral;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private Date dateOfBirth;
private Types.VerificationStatus verificationStatus;
private Types.ApprovalStatus approvalStatus;
private boolean enabled;
private boolean verified = false;
private String address;
private String city;
private String lga;
private String state;
private String terminalId;
private String accountNumber;
private Double msc;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String transactionPin;
@Transient
private boolean hasPin;
public ClPrincipal toPrincipal() {
ClPrincipal principal = new ClPrincipal();
principal.setProfileId(this.id);
principal.setUsername(this.email);
principal.setFirstname(this.firstName);
principal.setLastname(this.lastName);
principal.setRoleGroup(this.roleGroup.getName());
principal.setRoles(new ArrayList<>());
return principal;
}
public UserByTerminalDTO toUserTerminalDto(){
UserByTerminalDTO user = new UserByTerminalDTO();
user.setUserID(this.id);
user.setFirstName(this.firstName);
user.setLastName(this.lastName);
user.setMsc(this.msc);
return user;
}
public String fullName(){
return this.firstName + " " + this.lastName;
}
public boolean isHasPin() {
return Objects.nonNull(this.transactionPin) && !this.transactionPin.trim().isEmpty();
}
}
我希望将此模型用户配置文件的一些细节写入excel表中,并使其可供下载。你觉得我怎么解决这个问题。主要的错误来自这几行,特别是粗体字的那行
AtomicInteger cellNum = new AtomicInteger();
mapObj.forEach((key, value) -> {
XSSFCell cell = row.createCell(cellNum.getAndIncrement());
cell.setCellValue(key);
if (value instanceof Integer)
cell.setCellValue((Integer) value);
else if (value instanceof BigDecimal)
cell.setCellValue(((BigDecimal) value).doubleValue());
else if (value instanceof Long)
cell.setCellValue((Long) value);
**else cell.setCellValue((String) value);**
});
});
您假设对于els
分支,值
只能是字符串
,但从错误来看,它实际上是LinkedHashMap
。
确保使用的数据都是值
是映射
的情况,并相应地编写。
我得到了一个错误: “java.lang.String不能强制转换为java.util.LinkedHashMap”
给出此SO线程中给出的最后一个示例。 我得到这个错误: 我应该使用jooq会满意的特殊映射器吗? 欢迎任何帮助 编辑: Jooq版本:3.14.3 Postgres:11 dto公司 我也尝试过使用SimpleFlatMapper 但是得到 我正在使用spring boot,以下是我对jackson的依赖: 堆栈跟踪:
应用程序属性 我也试图改变mysql的版本仍然一样。我该怎么解决这个?
问题内容: 我遇到以下错误: 用下面的代码 我为什么不能这样做? 问题答案: 问题来自杰克逊。如果没有足够的信息反序列化到哪个类,则使用。 既然你不通知你的元素类型的杰克逊,它不知道你要反序列化到的秒。因此,它恢复为默认值。 相反,您可能可以使用,然后以比保证价格允许的方式丰富的方式进行处理。像这样:
问题内容: 我有一个包含以下定义: 值定义如下: 在活动中被调用如下: 到目前为止,一切都很好,但是当代码被实际调用时,我得到了这个错误: 这个错误对我来说没有任何意义。该列表仅包含可以转换为int的值,并且xml文件和代码中给出的默认值也仅表示一个数字。那么,为什么会出现此错误,以及如何解决呢? 问题答案: 如果您查看内部的内容,将会发现问题: 您的键“ limitSetting”返回一个不能转