首页 > 解决方案 > SpringBoot:如何通过 RestTemplate HttpMethod GET 发送对象?

问题描述

我是 SpringBoot 的新手,并试图弄清楚一些事情。我有一个请求 DTO,我想将它作为 RestTemplate HttpMethod.GET 调用的一部分发送。我们如何做到这一点?

DTO

class User {

  String firstName;
  String lastName;

}

微服务 1

User dto=new User("abc","xyz");

// Is this possible ?

HttpEntity<User> entity=new HttpEntity<>(dto);
restTemplate.exchange(url, HttpMethod.GET, entity, Object.class);

如果可以的话,如何在微服务 2 中获取微服务 1 传过来的 User 的值。

微服务 2

// Is this possible ?

@GetMapping("/url")
Object getData(@RequestBody User user){

}

如果以上都做不到,那如何使用HashMash来发送数据呢?

微服务 1

HashMap<String,String> map=new HashMap<>();
map.put("name", "abc");
HttpEntity<User> entity=new HttpEntity<>(map);

restTemplate.exchange(url, HttpMethod.GET, entity, Object.class);

现在如何获取从 MicroService 1 传递过来的 HashMap 的值。

微服务 2

// Is this possible ?

@GetMapping("/url")
Object getData(@RequestParam HashMap<String,String> user){

   sysout(user) // Null

}

标签: javaspringspring-boot

解决方案


需要使用 HTTP post 方法发送 body,get 可以有请求参数。

 ResponseEntity<UserResponse> responseEntity = restTemplate.exchange(
                url,
                HttpMethod.POST,
                requestEntity,
                UserResponse.class
        );

请求实体可以如下构建。

//setting up the request headers
        HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.setContentType(MediaType.APPLICATION_JSON);    

        //setting up the request body
        User user = new User();
        user.setName("Sample User");
        user.setUsername("user1");
        user.setPassword("pass123");

        //request entity is created with request body and headers
        HttpEntity<User> requestEntity = new HttpEntity<>(user, requestHeaders);

有关更多详细信息,请通过链接。


推荐阅读