使用RestTemplate 上传文件

ResetTemplate 发送 post 请求

public static void main(String[] args) {
    JSONObject jsonObject = new JSONObject();
    jsonObject.put("deviceId", "1345");
    jsonObject.put("commandCode", "553339299121");
    try {
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.getMessageConverters().add(new FastJsonHttpMessageConverter());
        restTemplate.postForObject("http://localhost:8080/Lock/master/sendCmd", jsonObject, void.class);
    } catch (RestClientException e) {
        e.printStackTrace();
    }
}

请求的controller的代码

@RequestMapping(value = "/sendCmd", method = RequestMethod.POST)
@ResponseBody
public void sendCommnand(@RequestBody JSONObject json){
    logger.info(json.toJSONString());
}
  1. 如果不需要返回值,两边可以直接配成 void。
  2. 两边的参数的结果要相同,否则会报415错误,即不支持的类型。
  3. 如果服务端有返回值,但是请求端是用void接收,会报错。(返回值怎么可能转化成void)
  4. 如果服务端没有返回值,请求端如果用其他类型接收,都是null。
  5. 即便 RestTemplate 中的返回值和服务端的返回值不同,也可以请求到,只是客户端会报异常:org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type ……
  6. 服务端的参数要加 @RequestBody 的注解

上传文件

public static void transFile(){
    String url = "http://localhost:8080/Lock/nbdc/remoteUpdate";
    RestTemplate restTemplate = new RestTemplate();
    FileSystemResource resource = new FileSystemResource(new File("C:\\Users\\Administrator\\Desktop\\40.txt"));  
    MultiValueMap param = new LinkedMultiValueMap<>();  
    param.add("deviceId", "123424");  
    param.add("file", resource);
    Boolean recv = restTemplate.postForObject(url, param, Boolean.class);
    System.out.println(recv);
}
@RequestMapping(value="/remoteUpdate")
@ResponseBody
public void remoteUpdteTest(String deviceId,@RequestParam MultipartFile file){
    System.out.println(deviceId);
}
  1. 如果有 @RequestParam 注解,MultiValueMap中的名字必须与它对应,否则请求不到。
  2. 如果没有 @RequestParam 注解,MultiValueMap中的名字与它不对应,可以请求到,但是file为null。

你可能感兴趣的:(Java,Spring)