Spring(003)-消费返回list的rest服务

通过spring提供的RestTemplate就可以访问rest服务。首先需要创建一个RestTemplate,这个需要手动来创建bean

@Configuration
public class DemoRestConfiguration {

    @Bean
    public RestTemplate restTemplate(SimpleClientHttpRequestFactory simpleClientHttpRequestFactory) {
        return new RestTemplate(simpleClientHttpRequestFactory);
    }

    @Bean
    public SimpleClientHttpRequestFactory simpleClientHttpRequestFactory() {
        SimpleClientHttpRequestFactory simpleClientHttpRequestFactory= new SimpleClientHttpRequestFactory();
        simpleClientHttpRequestFactory.setConnectTimeout(1000);
        return simpleClientHttpRequestFactory;
    }
}

需要说明的是,这里使用SimpleClientHttpRequestFactory ,是为了可以设置一些参数等,也可以直接new。

先设计一个返回list的rest服务。

    @GetMapping(value = "/get", produces = "application/json")
    public List<Order> getAllOrders() {
        List<Order> orders = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            Order order = new Order();
            order.setOrderId(i);
            order.setOrderName(String.format("order:%d", i));
            orders.add(order);
        }
        return orders;
    }

通过postman访问

 

通过代码进行访问-Array

@Service
public class OrderConsumer {

    private static String HOST = "http://localhost:8080/action/";
    @Autowired
    private RestTemplate restTemplate;

    public List<Order> getOrders() {
        Order[] orders = restTemplate.getForObject(String.format("%s/get", HOST), Order[].class);
        return Arrays.asList(orders);
    }
}

这里需要注意的是,传入了数组,最终也返回了数组。

测试代码

通过代码访问2-ParameterizedTypeReference

   public List<Order> getOrdersPtr() {
        ParameterizedTypeReference<List<Order>> ptr = new ParameterizedTypeReference<List<Order>>() {};
        ResponseEntity<List<Order>> list = restTemplate.exchange(String.format("%s/get", HOST), HttpMethod.GET, null, ptr);
       return list.getBody();
    }

 

posted @ 2019-11-14 23:36  ibrake  阅读(340)  评论(0编辑  收藏  举报