繁体   English   中英

请求处理失败; 嵌套异常是 java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to MyClass

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM