この質問はこれに関連していますSO質問( Spring boot @ResponseBodyはエンティティIDをシリアル化しません )。アプリをSpring Bootに移行して使用した後、 spring-boot-starter-data-rest依存関係では、エンティティの@Idフィールドが結果のJSONでマーシャリングされなくなりました。
これは私のリクエストマッピングであり、デバッグ中に、データを返す前にデータが変更されていないことがわかります。そのため、@ Idプロパティは後で削除されます。
@RequestMapping(method = RequestMethod.GET, produces = {"application/json"})
public PagedResources<Receipt> receipts(Pageable pageable, PagedResourcesAssembler assembler) {
Page<Receipt> receipts = receiptRepository.findByStorerAndCreatedDateGreaterThanEqual("003845", createdStartDate, pageable);
PagedResources<Receipt> pagedResources = assembler.toResource(receipts, receiptResourceAssembler);
return pagedResources;
}
私のアプリではユーザーがその値で検索できるため、結果のJSONに@Idフィールドを保持できる設定はありますか?.
ありがとう:)
デフォルトでは、Spring DataRestはIDを吐き出しません。ただし、 exposeIdsFor(..) メソッドを使用して選択的に有効にすることができます。あなたはこのような構成でこれを行うことができます
@Configuration
public static class RepositoryConfig extends
RepositoryRestMvcConfiguration {
@Override
protected void configureRepositoryRestConfiguration(
RepositoryRestConfiguration config) {
config.exposeIdsFor(Class1.class, Class2.class);
}
}
Spring Data Rest 2.4(spring-boot 1.3.0.M5を使用している場合は推移的な依存関係)以降、 RepositoryRestConfigurerAdapter を使用できます。例えば、
@Configuration
class SpringDataRestConfig {
@Bean
public RepositoryRestConfigurer repositoryRestConfigurer() {
return new RepositoryRestConfigurerAdapter() {
@Override
public void configureRepositoryRestConfiguration(
RepositoryRestConfiguration config) {
config.exposeIdsFor(Class1.class, Class2.class);
}
}
}
}
公開する前にId
ディスカッションを読んでください: https://github.com/spring-projects/spring-hateoas/issues/66
In RESTリソースのIDはそのURIです。クライアントは明示的にIDを使用してURLを作成しません。たとえば、IDをuuidに置き換えることができます。または、URLスキームを変更することもできます。
@ Idアノテーションモデルクラスで魔法を実行します。
public class Location {
@Id
private String woeid;
private String locationName;
次に、mongoオブジェクトは次のようになります。
{
"_id" : "2487889",
"_class" : "com.agilisys.weatherdashboard.Location",
"locationName" : "San Diego, CA"
}
@ getter、@ settersを置くと、jsonの結果に公開されます。お役に立てば幸いです。