将GET响应从restTemplate转换为Custom类

时间:2019-07-02 06:59:50

标签: java json rest spring-boot objectmapper

因此,我正在使用Spring-boot REST API中的RestTemplate。

我有一个TEST弹簧启动应用程序,该应用程序对另一个应用程序EMPLOYEE-TEST进行restTemplate调用。 现在,我在两个应用程序中都存在Employee模型类,但是仅在EMPLOYEE-TEST端存在一个存储库。

问题:因此,我只是尝试从TEST一侧进行常规的findAll(),作为回报,尝试获取Employee对象的列表,但是问题是我得到了LinkedHashMap的列表对象而不是员工对象。

现在,我可以为小类一个成员设置一个成员变量,但是当一个类有大约10个成员变量并且我有成千上万个这样的类时,这是不可行的。

这是代码。

TestController:

@RequestMapping("/test")
public class TestController {

    @Autowired
    private RestTemplate restTemplate;

    @Value("${rest.url}")
    private String url;

    @GetMapping("/")
    public ResponseEntity<Object> findEmployees(){
        String response = restTemplate.getForObject(this.url, String.class);
        System.out.println("response is \n"+response);

        List<Employee> list_response = restTemplate.getForObject(this.url, List.class);
        System.out.println(list_response);
        for(Object e : list_response) {
            System.out.println(e.getClass());
        }
        return new ResponseEntity (restTemplate.getForEntity(this.url, Object[].class), HttpStatus.OK);
    }
}

url = http://localhost:8080/employee/application.properties

EmployeeController:

@RequestMapping("/employee")
public class EmployeeController {

    @Autowired
    private EmployeeRepository eRepository;


    @GetMapping("/")
    public ResponseEntity<Employee> findAll(){
        return new ResponseEntity ( eRepository.findAll(), HttpStatus.OK);
    }
}

输出:

response is
[{"id":1,"name":"Rahul","salary":10000},{"id":2,"name":"Rohit","salary":20000},{"id":3,"name":"Akash","salary":15000},{"id":4,"name":"Priya","salary":5000},{"id":5,"name":"Abhinav","salary":13000}]
[{id=1, name=Rahul, salary=10000}, {id=2, name=Rohit, salary=20000}, {id=3, name=Akash, salary=15000}, {id=4, name=Priya, salary=5000}, {id=5, name=Abhinav, salary=13000}]
class java.util.LinkedHashMap
class java.util.LinkedHashMap
class java.util.LinkedHashMap
class java.util.LinkedHashMap
class java.util.LinkedHashMap

因此,输出的第一行将打印存储在字符串中的响应,第二行是打印list_response变量。

现在,我的要求是拥有Employee对象列表,而不是LinkedHashMap对象。

让我知道到底需要什么。

1 个答案:

答案 0 :(得分:2)

使用ParameterizedTypeReference

 RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<List<Employee>> response = restTemplate.exchange(
      "http://localhost:8080/employees/",
      HttpMethod.GET,
      null,
      new ParameterizedTypeReference<List<Employee>>(){});
      List<Employee> employees = response.getBody();

https://www.baeldung.com/spring-rest-template-list