带有参数的REST API查询

时间:2019-02-02 18:28:33

标签: java spring-boot resttemplate

我正在尝试查询看起来像这样的服务器:

服务器代码

@RequestMapping(value = "/query_user", method = RequestMethod.GET)
public String queryUser(@RequestParam(value="userId", defaultValue="-1") String userId)
{
    int id = Integer.parseInt(userId);
    User user = this.service.getUser(id);
    ...
    return userJson;
}

当我测试此方法的邮差

客户代码

private synchronized void callServer(int id)
{
     final String URI = "http://localhost:8081/query_user";
     RestTemplate restTemplate = new RestTemplate();
     MultiValueMap<String, Object> map = new LinkedMultiValueMap();
     map.add("userId", id);

     restTemplate.getMessageConverters()
            .add(new MappingJackson2HttpMessageConverter());

     // Modified to use getForEntity but still this is not working.
     ResponseEntity<String> response 
          = restTemplate.getForEntity(URI, String.class, map); 
}

我该如何解决?从服务器端收到userJson很重要。


编辑

更改为getForEntity()方法后,我在服务器端不断获取defaultValue中的-1。我的代码肯定存在其他问题。我肯定是在发送不是userId的{​​{1}}。

2 个答案:

答案 0 :(得分:1)

您的queryUser()方法已映射到GET;从客户端致电POST restTemplate.postForEntity

答案 1 :(得分:0)

我是能够通过使用UriComponentsBuilder

来解决它
UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(URI)
        .queryParam("userId", id);

本质上是将参数附加到URI,这是我认为PostMan所做的(这就是我的想法)。

参考: https://www.oodlestechnologies.com/blogs/Learn-To-Make-REST-calls-With-RestTemplate-In-Spring-Boot