Spring Data Rest CrudRepository与ReadOnlyRepository

时间:2015-09-28 15:30:44

标签: spring-data spring-data-rest spring-restcontroller

我注意到Spring Data Rest存储库的行为异常。我有两种类型的实体。在我的应用程序中 - 只读实体(用于参考数据,如州代码,国家代码,邮政编码等)。我不想让最终用户改变这些。所以我实现了以下ReadOnly存储库。

@NoRepositoryBean
public interface ReadOnlyRepository<T, ID extends Serializable> extends Repository<T, ID> {

    T findOne(ID id);

    Iterable<T> findAll();
}


@Repository
public interface StateRepository extends ReadOnlyRepository<State, Long> {
}

现在,所有其他实体都有与之关联的CrudRepositories,因为它们是可编辑的实体,例如引用状态和邮政编码的地址。

这是一个例子。

@Repository
public interface CustomerRepository extends CrudRepository<Address, Long> {
}

我有一个只读和可编辑实体的控制器,带有对存储库的传递调用。

@RestController
@RequestMapping(value = "/addresses", produces = MediaType.APPLICATION_JSON_VALUE)
public class AddressController {

    @Autowired
    private AddressRepository addressRepository;

    @RequestMapping(method = RequestMethod.GET)
    @ResponseStatus(HttpStatus.OK)
    public Iterable<Address> getAllAddresses() {
        return addressRepository.findAll();
    }


    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    @ResponseStatus(HttpStatus.OK)
    public Address getAddress(@PathVariable("id") Long id) {
        return addressRepository.findOne(id);
    }
}

我有一个与State实体对应的相同的Controller。

有趣的是,对StateController的请求给了我一个HATEOAS json响应,而对Address的请求给了我一个非HATEOAS json响应。是什么给了什么?

1 个答案:

答案 0 :(得分:0)

我的坏。我的应用程序服务器没有重新部署某些存储库。这不是问题。

因此,对于遇到这些问题的人,您可能正在使用IDE的热代码替换功能。考虑重新启动您的应用程序,它应该是一个非问题。