簡體   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