While using Spring Data Rest after migrating an app to Spring Boot, I have observed that entity properties with @Id are no longer marshalled to JSON

China☆狼群 提交于 2019-11-26 22:39:34
Stackee007

By default Spring Data Rest does not spit out IDs. However you can selectively enable it through exposeIdsFor(..) method. You could do this in configuration, something like this

@Configuration
public static class RepositoryConfig extends
        RepositoryRestMvcConfiguration {

    @Override
    protected void configureRepositoryRestConfiguration(
            RepositoryRestConfiguration config) {
        config.exposeIdsFor(Class1.class, Class2.class);
    }
}

As of Spring Data Rest 2.4 (which is a transitive dependency if using spring-boot 1.3.0.M5) you may use the RepositoryRestConfigurerAdapter. For instance,

@Configuration
class SpringDataRestConfig {

    @Bean
    public RepositoryRestConfigurer repositoryRestConfigurer() {

        return new RepositoryRestConfigurerAdapter() {
            @Override
            public void configureRepositoryRestConfiguration(
                                 RepositoryRestConfiguration config) {
                config.exposeIdsFor(Class1.class, Class2.class);
            }
        }

    }

}

Before expose Id please read disussion: https://github.com/spring-projects/spring-hateoas/issues/66

In REST the id of a resource is its URI. The client doesn't explicitly use the id to build an url. You could, for example, replace your id for an uuid, for example. Or even change the url scheme.

@Id annotation in your model class does the magic.

public class Location {

    @Id
    private String woeid;
    private String locationName;

Then your mongo object will look like this:

{
    "_id" : "2487889",
    "_class" : "com.agilisys.weatherdashboard.Location",
    "locationName" : "San Diego, CA"
}

put @getter, @setters and it will be exposed to json results, hope it would help you

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!