RestTemplate代替http发送请求(好用,推荐)

dao层数据

import lombok.Data;
@Data
public class UserDo extends BasicEntity{
private String userName;
private String password;
}

配置类将RestTemplate配置为javaBean,定义3个超时(定义RestTemplate的时候尽量加上超时)

@Configuration
public class BeanConfiguration {
@Bean
public RestTemplate customRestTemplate(){
    HttpComponentsClientHttpRequestFactory factory=new HttpComponentsClientHttpRequestFactory();
    factory.setConnectionRequestTimeout(3000);
    factory.setConnectTimeout(3000);
    factory.setReadTimeout(3000);
    return new RestTemplate(factory);
}
}

post请求

控制层对外接口,post请求

@Controller
public class TestController{
@RequestMapping(value = "/testBody",method = RequestMethod.POST)
public @ResponseBody
UserDo testBody(@RequestBody UserDo userDo) {
    return userDo;
}

}

测试类,注入RestTemplate实例,赋值,发送请求post请求用postForObject方法传参:(请求的url,请求的入参就是body,返回类型),断言

import com.robot.model.UserDo;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.web.client.RestTemplate;
import static org.assertj.core.api.Assertions.*;
import javax.annotation.Resource;

/**
 * 本工程的程序入口,可以指定入口类,不指定也可以
 * @SpringBootTest(classes = {SpringbootApplication.class})
 */
@SpringBootTest
/**
 * @RunWith就是一个运行器,是JUnit4里的
 * 指定用什么运行器运行,例如下面两个运行器
 * @RunWith(JUnit4.class)
 * @RunWith(SpringRunner.class)
 */
@RunWith(SpringRunner.class)
public class Test {
@Resource
RestTemplate restTemplate;
@org.junit.Test
public void testBody(){
    UserDo userDo=new UserDo();
    userDo.setUserName("little");
    userDo.setPassword("123456");
    String postURL="http://127.0.0.1:8080/testBody";
    UserDo userDo1=restTemplate.postForObject(postURL,userDo ,UserDo.class );
    assertThat(userDo1.getUserName()).as("测试请求成功").isEqualTo("little");
}
}

GET请求

控制层对外接口,get请求,返回userDo

@Controller
public class TestController{
@RequestMapping(value = "/testGet",method = RequestMethod.GET)
//请求时要传入一个String类型的入参,在方法定义了
public @ResponseBody
UserDo testGet(@RequestParam String userName){
    UserDo userDo =new UserDo();
    userDo.setUserName("xxx");
    userDo.setPassword("123456");
    return userDo;
}
}

测试类,注入RestTemplate实例,发送请求get请求用getForObject方法传参:(请求的url,返回类型,请求参数),断言

import com.google.common.base.Splitter;
import com.google.common.collect.Maps;
import com.robot.model.UserDo;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.web.client.RestTemplate;
import static org.assertj.core.api.Assertions.*;

import javax.annotation.Resource;
import java.util.Map;
@SpringBootTest
@RunWith(SpringRunner.class)
public class Test {
@Resource
RestTemplate restTemplate;

@org.junit.Test
public void testGet(){
    //发送请求的url,传入参数,参数名与控制层的入参value一致,参数值与Map的key一致(其实真正用的是littleElephant这个值)
    String postURL="http://127.0.0.1:8080/list/testGet?userName={name}";
    Map params= Maps.newHashMap();
    params.put("name","littleElephant" );
    UserDo userDo1=restTemplate.getForObject(postURL ,UserDo.class ,params);
    assertThat(userDo1.getUserName()).as("测试请求成功").isEqualTo("xxx");
}
}

https://www.cnblogs.com/javazhiyin/p/9851775.html这篇文详细说明了RestTemplate如何发送请求,很好用,推荐

你可能感兴趣的:(测开)