简体   繁体   中英

Request processing failed; nested exception is java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to MyClass

I am doing following

List<Campaign> campaigns = queryResultCampaign.getElements();
        
List<Campaign> campaigns = campaigns.stream().filter(campaign -> campaign.getCurrentStatus() !="deleted")
                .map(campaign -> (Campaign) campaign).collect(Collectors.toList());

and get error

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

I have almost tried everything over the weekend and no solution worked for me.

If I remove this streaming part from the code then everything works fine, I wanted to filter objects with certain status but then it started to give this error

@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;
    }

Any help will be appreciated. --Maria

let's get rid of Stream -s then:

List<Campaign> filteredCompaigns = new ArrayList<>();

for (Campaign campaign: campaigns) {
  if (!campaign.getCurrentStatus().equals("deleted")) {
     filteredCompaigns.add(campaign);
  } 
}
/// use filteredCompaigns from here

ok, I fixed as follow, First from executeTask() returned json string initially I was returning 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());

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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