Spring Data Rest リポジトリの動作に異常があることに気付きました。私は2種類のエンティティを持っています。私のアプリケーションでは、読み取り専用エンティティ(州コード、国コード、郵便番号などの参照データ用)。エンドユーザーにこれらを変更させたくありません。そこで、次の 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 レスポンスが返されます。何を与える?