1.Service:外部接口调用
声明
@Autowired
private RestTemplate restTemplate;
@Autowired
@Qualifier(“sslRestTemplete”)
private RestTemplate sslRestTemplete;
实际接口呼出
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>(); // 定义header
headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_UTF8_VALUE);// 呼出格式
headers.add(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_UTF8_VALUE);// 接收格式
HttpEntity<Object> entity = new HttpEntity<>(postJsonString, headers);// 定义HttpEntity
if (url.startsWith(“https”)) {// Https开头的网址使用sslRestTemplete
this.setDefaultCharset(sslRestTemplete.getMessageConverters());// 未知缘由格式中的UTF8未生效,单独设置
// Post的情况
reps = sslRestTemplete.postForObject(url, entity, String.class);
// Put的情况
ResponseEntity<String> repsPut = sslRestTemplete.exchange(url, HttpMethod.PUT, entity, String.class);
reps = repsPut.getBody(); }
// Get
reps = sslRestTemplete.getForObject(url, String.class);
} else {// Http开头的网址使用 restTemplete,与前者类似 }
单独设置数据格式
private void setDefaultCharset(List<HttpMessageConverter<?>> converterList) {
for (HttpMessageConverter<?> converter : converterList) {
if (converter instanceof StringHttpMessageConverter) {
((StringHttpMessageConverter) converter).setDefaultCharset(Charset.forName(“UTF-8”));
break; } }}
2.ServiceTest:UT测试的Mock
声明:
@Autowired
WebApplicationContext wc;
MockMvc mockMvc;
@MockBean
@Qualifier(value = “restTemplate”)
RestTemplate restTemplate;
@MockBean
@Qualifier(value = “sslRestTemplete”)
RestTemplate sslRestTemplete;
@Before
public void setUp() throws Exception {
this.mockMvc = MockMvcBuilders.webAppContextSetup(wc).build();
}
mock主代码中读取文件等的获得的值
ReflectionTestUtils.setField(XXXXService, “testMode”, false);
ReflectionTestUtils.setField(XXXXService, “XXXXurl”, “https://XXXX”);
ReflectionTestUtils.setField(XXXXService, “XXXXUrl”, “https://XXXXXX”);
ReflectionTestUtils.setField(XXXXService, “sslRestTemplete”, sslRestTemplete);
ReflectionTestUtils.setField(XXXXService, “restTemplate”, restTemplate);
MOCK函数
// MockPut
ArgumentCaptor<HttpMethod> httpMethodPut = ArgumentCaptor.forClass(HttpMethod.class);
ArgumentCaptor<HttpEntity> httpEntityPut = ArgumentCaptor.forClass(HttpEntity.class);
ArgumentCaptor<String> stringPut = ArgumentCaptor.forClass(String.class);
Mockito.when(sslRestTemplete.exchange(stringPut.capture(), httpMethodPut.capture(), httpEntityPut.capture(), Mockito.any(Class.class))).thenReturn(new ResponseEntity<>(ResponseStr, HttpStatus.OK));
// MockPost
ArgumentCaptor<HttpEntity> httpEntityPost = ArgumentCaptor.forClass(HttpEntity.class);
ArgumentCaptor<String> stringPost = ArgumentCaptor.forClass(String.class);
Mockito.when(sslRestTemplete.postForObject(stringPost.capture(), httpEntityPost.capture(), Mockito.any(Class.class))).thenReturn(ResponseStr);
// MockGet
Mockito.when(sslRestTemplete.getForObject(url, String.class)).thenReturn(ResponseStr)
// MOCK数据格式设置底层
List<HttpMessageConverter<?>> converterList = new ArrayList<>();
converterList.add(new ByteArrayHttpMessageConverter());
Mockito.when(sslRestTemplete.getMessageConverters()).thenReturn(converterList);
获取Caputer内容
DTO.clase putDto= JSONObject.parseObject(httpEntityPut.getValue().getBody().toString(),DTO.class);
3.Json和Dto的相互转换
DTO中项目设置
@JSONField(name = “JSONFieldName”)
private 数据类型.class 项目名;
DTO转Json
String dtoJson = JSONObject.toJSONString(DTO)
Json转Dto
DTO.clase dto= JSONObject.parseObject(dtoJson,DTO.class);















暂无评论内容