[英]java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast
[英]Request processing failed; nested exception is java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to MyClass
我正在关注
List<Campaign> campaigns = queryResultCampaign.getElements();
List<Campaign> campaigns = campaigns.stream().filter(campaign -> campaign.getCurrentStatus() !="deleted")
.map(campaign -> (Campaign) campaign).collect(Collectors.toList());
并得到错误
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.banoent.eloquaapi.client.campaign.model.Campaign
周末我几乎尝试了所有方法,但没有任何解决方案对我有用。
如果我从代码中删除此流部分,那么一切正常,我想过滤具有特定状态的对象,但随后它开始出现此错误
@GetMapping(path = "/campaign/retrieve/list")
public String retrieveCampaigns(@QueryParam(value = "offset") Integer offset,
@QueryParam(value = "count") Integer count,
@QueryParam(value = "page") Integer page,
Model model,
RedirectAttributes redirectAttributes,
HttpServletRequest request) {
String site = (String) request.getSession().getAttribute(EloquaApiConstants.SITE);
String oauthError = (String) request.getSession().getAttribute(EloquaApiConstants.OAUTH_ERROR);
model.addAttribute(EloquaApiConstants.SITE, site);
model.addAttribute(EloquaApiConstants.OAUTH_ERROR, oauthError);
offset = offset == null ? 0 : offset;
count = count == null ? recordsPerPage.get(0) : count;
page = page == null ? 1 : page;
CookieDefinition cookieDefinitionLoginDetails = CookieDefinition.builder()
.cookies(request.getCookies())
.cookiePrefix(CookiePrefix.SOURCE)
.build();
LoginDetails loginDetails = oauthService.createLoginDetails(cookieDefinitionLoginDetails);
try {
loginDetails = oauthService.verifyToken(loginDetails);
} catch (LoginException e) {
model.addAttribute(EloquaApiConstants.OAUTH_TOKEN_VERIFICATION_ERROR, true);
redirectAttributes.addFlashAttribute(EloquaApiConstants.OAUTH_ERROR, false);
redirectAttributes.addFlashAttribute(EloquaApiConstants.OAUTH_TOKEN_VERIFICATION_ERROR, true);
return "redirect:/login/oauth/login-with-eloqua";
}
EloquaTaskQueryParameterDefinition countQueryParameterDefinition = EloquaTaskQueryParameterDefinition.builder()
.eloquaTaskQueryParameter(EloquaTaskQueryParameter.COUNT)
.eloquaTaskQueryParameterValue(count)
.build();
EloquaTaskQueryParameterDefinition depthParameterDefinition = EloquaTaskQueryParameterDefinition.builder()
.eloquaTaskQueryParameter(EloquaTaskQueryParameter.DEPTH)
.eloquaTaskQueryParameterValue("minimal")
.build();
EloquaTaskQueryParameterDefinition lastUpdatedParameterDefinition = EloquaTaskQueryParameterDefinition.builder()
.eloquaTaskQueryParameter(EloquaTaskQueryParameter.LAST_UPDATED_AT)
.eloquaTaskQueryParameterValue(0L)
.build();
EloquaTaskQueryParameterDefinition pageQueryParameterDefinition = EloquaTaskQueryParameterDefinition.builder()
.eloquaTaskQueryParameter(EloquaTaskQueryParameter.PAGE)
.eloquaTaskQueryParameterValue(page)
.build();
EloquaTaskDefinition taskDefinition = EloquaTaskDefinition.builder()
.service(EloquaService.CAMPAIGN)
.serviceType(QueryResult.class)
.task(EloquaTask.RETRIEVE_MULTIPLE)
.queryParametersDefinitions(Arrays.asList(countQueryParameterDefinition,
depthParameterDefinition,
lastUpdatedParameterDefinition,
pageQueryParameterDefinition))
.credentials(loginDetails)
.build();
QueryResult<Campaign> queryResultCampaign = (QueryResult<Campaign>) taskService.executeTask(taskDefinition);
List<Campaign> campaigns = queryResultCampaign.getElements();
List<Campaign> collect = campaigns.stream().filter(campaign -> campaign.getCurrentStatus() !="deleted")
.map(campaign -> (Campaign) campaign).collect(Collectors.toList());
PaginationModel pager = PaginationViewHelper.getPaginationModel(queryResultCampaign.getTotal(),
offset,
count,
page,
recordsPerPage);
model.addAttribute("paginationModel", pager);
model.addAttribute("campaigns", campaigns);
return CAMPAIGNS_RETRIEVE_CAMPAIGN;
}
任何帮助将不胜感激。 ——玛丽亚
让我们摆脱Stream
-s 然后:
List<Campaign> filteredCompaigns = new ArrayList<>();
for (Campaign campaign: campaigns) {
if (!campaign.getCurrentStatus().equals("deleted")) {
filteredCompaigns.add(campaign);
}
}
/// use filteredCompaigns from here
好的,我修复如下,首先从 executeTask() 返回 json 字符串最初我正在返回 Body。
String jsonString = (String)taskService.executeTask(taskDefinition);
ObjectMapper objectMapper = new ObjectMapper();
QueryResult<Campaign> queryResultCampaign = objectMapper.readValue(jsonString, new TypeReference<QueryResult<Campaign>>() {});
List<Campaign> campaigns = queryResultCampaign.getElements();
campaigns = campaigns.stream().filter(campaign -> extracted(campaign)).collect(Collectors.toList());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.