Spring 数据剩余 CrudRepository 与 ReadOnlyRepository

Spring Data Rest CrudRepository vs ReadOnlyRepository

我注意到 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);
    }
}

我有一个与国家实体对应的完全相同的控制器。

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

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

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