java. util. LinkedHashMap cannot be cast to 실체 류... 문제 의 발생 및 해결 방법

RestTemplate 호출 서 비 스 를 사용 할 때 서비스 제공 자가 하나의 List 집합 으로 되 돌아 오기 때문에 소비자 호출 을 사용 할 때 restTemplate.getForObject() 되 돌아 오 기 를 기대 하 는 유형 을 직접 썼 다 List.class.
	@GetMapping("/list2")
    public List<EmployeeModel> list2() {
        List<EmployeeModel> employeeModels = restTemplate.getForObject("http://SPRINGCLOUD-EMPLOYEE-PROVIDER/emp/list", List.class);
        employeeModels.forEach(System.out::println);
        return employeeModels ;
    }

실행 중, 옮 겨 다 닐 때 자바 util. LinkedHashMap cannot be cast to... 이 이상 을 알 렸 습 니 다.
나중에 곰 곰 이 생각해 보 니 호출 과정 에서 데이터 유형의 변화: 서비스 제공 자 는 LIst 집합 으로 돌 아 왔 으 나 표시 @RequestBody 되 었 기 때문에 돌아 갈 때 List 집합 을 json 의 형식 (내 부 는 jackjson 기술 지원) 으로 바 꾸 고 서비스 소비자 가 사용 restTemplate.getForObject() 하 며 두 번 째 매개 변 수 는 받 아들 이 는 유형 으로 전달 된다.(즉, 응답 체 의 내용 을 어떤 형식 으로 밀봉 하 는 것 입 니까?) 위의 쓰기 와 같이 공급 자가 되 돌아 오 는 json 을 list 로 바 꿉 니 다. 그러나 이 list 는 이전 과 다 릅 니 다. (하 나 는 jackjson 이 바 뀌 었 고 하 나 는 restTemplate 가 바 뀌 었 으 며 내부 체제 가 다 를 수 있 습 니 다) 그래서 집합 을 옮 겨 다 니 면 위의 이상 을 보고 합 니 다.
개선 방법:
  • restTemplate.getForObject() String 형식 으로 받 아들 이 고 json 문자열
    //        String    , json   
    String json = restTemplate.getForObject("http://SPRINGCLOUD-EMPLOYEE-PROVIDER/emp/list",
                    String.class);
    
  • 을 받 아들 입 니 다.
  • 알 리 바 바 의 fastjson 을 사용 하여 json 문자열 을 list 집합
    //  json       
    List<EmployeeModel> employeeModels = JSON.parseArray(json, EmployeeModel.class);
    
  • 으로 변환 합 니 다.
  • 지금 은 정상 적 인 List 집합 으로 옮 겨 다 닐 수 있 습 니 다
  • 이상 은 자신 이 공부 할 때 개인 적 인 이해 입 니 다. 잘못 되면 지적 해 주 셔 서 감사합니다.
  • 좋은 웹페이지 즐겨찾기