RestTemplate的超全讲解(全)转

RestTemplate的超全讲解(全)转

https://blog.csdn.net/weixin_47872288/article/details/121842374

(81条消息) RestTemplate的超全讲解(全)_码农研究僧的博客-CSDN博客_resttemplate

 视频地址:

https://www.bilibili.com/video/BV1tJ41147uj?t=624.5&p=4

 

post与get的区别在于post的方法传参map必须是MultiValueMap

基本类型传参和实体类型传参

复制代码
@RestController
public class UserController{
    //实体传参
    @RequestMapping(value="/addUser1")
public UserDTO addUser(userDTO userdto)
{
    return userdto;
}

@ResquestMapping(value="/addUser2")
public UserDTO addUser2(Long userId,String userName)
{
UserDTO u=new UserDTO();
u.setUserId(userId);
u.setUserName(userName);
return u;
}

}
复制代码

 

 Post 请求方式调用服务接口

复制代码
//http://localhost:8080/postFor0bject1
@GetMapping("/postForObject1")
public UserDT0 postForObject1 ( ) {
    //远程访问的Url UserDTO
    String url = "http://localhost:8080/addUser1";
    // Post方法必须使用MultiValueMap传参。//使用UserDTO传参也可以
    
    MultiValueMap<String,0bject> paramMap = new LinkedMultiValueMap<>();
    paramMap.add ("userId", 1008L);
    paramMap.add ("userName ","巧克力");
    UserDT0 userDTO = restTemplate.postForObject(url,paramMap,UserDT0.class);
    return userDTO;
}
复制代码

 

如果服务接口使用到@RequestBody,用httpentity  ,此时不能使用MultiValueMap 传参!!

@RequestMapping( value = "/addUser3" )
public UserDT0 addUser3(@RequestBody UserDT0 userDTO) {
    userDTo.setUserName(userDTo.getUserName() + " from RequestBody" );
    return userDTO;
}



复制代码
//http://localhost:8888/postForObject2
@GetMapping("/postForObject2")
public UserDT0 postForObject2( ) {
    //申明一个请求头
    HttpHeaders headers = new HttpHeaders();
    //application/json
    headers.setContentType( MediaType .APPLICATION_JSON);//远程访问的Url UserDTO
    string url = "http://localhost:8080/addUser3";
    /**
        此处使用MultiValueMap会报错
        MultiValueMap<String,0bject> paramMap = new LinkedMultiValueMap<>( );
        paramMap.add("userId",100OL) ;
        paramMap.add("userName","fencaibc");*/
    //此处可以使用HashMap代替,但是会有警告
    
    UserDT0 userDTO = new UserDTO( );
    userDTO.setUserId( 1088L);
    userDT0.setUserName("课程");
    HttpEntity<UserDTO> entityParam new HttpEntity<UserDTO>(userDTO,headers) ;
    UserDT0 result = restTemplate.postFor0bject(url, entityParam,UserDTO.class);
    return result ;
}
复制代码

 

 

 

PostForEntity 方法 返回内容比 postForObject 更丰富,但是要注意,基本类型的参数采用 MultiValueMap封装参数,@ReqeustBody 修饰的参数 要以httpEntity 封装对象实例作为参数

同时,返回结果要是 ResponseEntity类型

复制代码
//http://localhost:8088/ postForEntity1@GetMapping( " / postForEntity1")
public UserDT0 postForEntity1( ) {
    string url = "http://localhost:8080/addUser1" ;
    
    MultiValueMap<String,object> paramMap = new LinkedMultiValueMap<>( );
    
    paramMap.add("userId", 100);
    paramMap.add("userName" ,"课程");
    
    ResponseEntity<UserDT0> userDTOResponseEntity =restTemplate.postForEntity(url,paramMap,UserDTO.class) ;
    
    HttpStatus statusCode = userDTOResponseEntity.getStatusCode( );
    
    int statusCodeValue = userDTOResponseEntity.getStatusCodeValue( );
    
    HttpHeaders headers = userDTOResponseEntity. getHeaders( );
    
    return userDTOResponseEntity. getBody( );
}
复制代码

效果

 

posted on   hztech  阅读(160)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示