springboot2集成RestTemplate并使用fastjson序列化对象

下面只记录使用内容不做衍生解读。
依赖包:

1
2
3
4
5
6
7
8
9
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.55</version>
</dependency>

采用RestTemplateBuilder方式进行构建。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Configuration
public class RestTemplateConfig {

    @Resource
    private RestTemplateBuilder restTemplateBuilder;

    @Bean
    public RestTemplate restTemplate() {
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();

        RestTemplate restTemplate = restTemplateBuilder.build();
        List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();

        List<HttpMessageConverter<?>> converters = messageConverters.stream()
                           .filter(item -> !(item instanceof MappingJackson2HttpMessageConverter))
                           .collect(Collectors.toList());
        converters.add(converter);

        restTemplate.setMessageConverters(converters);
        return restTemplate;
    }
}

默认情况下是使用jackson2作为json处理工具,我们需要将jackson2的converter删除掉,并将FastJson的Converter放进去即可。

1
2
3
4
5
6
7
8
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
// 设置Authorization 为Bearer 方式的值
headers.setBearerAuth(userAccessToken);
// T 是请求对象
T t = new T();
HttpEntity<T> entity = new HttpEntity<>(t, headers)
LockSheetResponse lockSheetRes = restTemplate.postForObject(url, entity, LockSheetResponse.class)

这样t会自动使用fastjson converter转化成json,请求响应会自动映射到LockSheetResponse实体对象中。

如果resttemplate返回400 响应需要检查发送过去的参数是否满足需要,比如驼峰有没有转成下划线等等。如果请求参数不满足要求将返回400。