学习Spring Data Rest

Spring Data Rest有利于实现架构的读写分离,学习CQRS模式的基础,在springcloud中我们项目通过feign进行微服的调用,但是,比如一个findOne或list的查询,需要从controller写到dao层,还需提供feign接口,很是麻烦,如果使用Spring Data Rest进行命令查询的责任分离,命令改变对象状态的操作.

Spring Data Rest默认会为每一个Repository创建基于该实体s(例如users)的查询连接,支持JPA的属性命名查询,使用@Param注解接收客户端传来的参数

引入依赖

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>

踩坑记录:

我们的项目中使用的是Jackson,在全局yml文件中配置了jackson默认的时间解析方式,使用RestTemplate序列化实体对象的Date属性时会报错

解决办法:

1.注释掉全局yml配置的jackson时间解析格式,配置ObjectMapper时间解析 ------- 不采用这个

2.继承JsonDeserializer<Date>重写deserialize方法

public class CustomJsonDateDeserializer extends JsonDeserializer<Date> {

    @Override
    public Date deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String date = jp.getText();
                try {
                    return format.parse(date);
                } catch (ParseException e) {
                    throw new RuntimeException(e);
                }
    }

}

且在setter上加上注解

@JsonDeserialize(using = CustomJsonDateDeserializer.class) 

3.配置RestTemplate支持HAL/JSON格式

@Configuration
public class RestTemplateConfig {

    @Autowired
    private ObjectMapper objectMapper;

    @Bean
    public RestTemplate restTemplate() {
        // converter
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setSupportedMediaTypes(Arrays.asList(HAL_JSON));
        converter.setObjectMapper(objectMapper);

        RestTemplate restTemplate = new RestTemplate(Collections.singletonList(converter));
        return restTemplate;
    }
4.RestTemplate访问Spring Data Rest获取集合示例

// for a collection
ParameterizedTypeReference<PagedResources<DataRest>> responseType =
     new ParameterizedTypeReference<PagedResources<DataRest>>() {};
// GET
 PagedResources<DataRest> page = restTemplate.exchange(url, HttpMethod.GET, null, responseType).getBody();






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值