2015-06-05 4 views
2

Я изучал Spring Boot (1.2.4), чтобы создать простой репозиторий RESTful, используя H2 & Jackson.Spring Boot частично заменяет autoconfiguration

Как и другие, я заметил, что по умолчанию поля @Id не находятся в возвращенном Json (как описано в этом вопросе: 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).

Поэтому я хочу настроить конфигурацию, чтобы включить их.

НО У меня возникли проблемы с тем, чтобы все это работало.

Базовый класс объектов:

@Entity 
public class Thing { 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private long id; //I want this to appear in the RESTful JSON 

    private String someInformation; 

    protected Thing(){}; 

    public String getSomeInformation() { return someInformation; } 

    public void setSomeInformation(String someInformation) { this.someInformation = someInformation; } 

} 

Базовый интерфейс хранилища:

public interface ThingRepository extends PagingAndSortingRepository<Thing, Long> {  
    List<Thing> findBySomeInformation(@Param("SomeInformation") String someInformation); 
} 

Простой Отправной применение:

@ComponentScan 
@EnableAutoConfiguration 
public class Application {  
    public static void main(String[] args) throws Exception { 
     SpringApplication.run(Application.class, args); 
    }  
} 

И мой класс конфигурации:

@Configuration 
public class RepositoryRestMvcConfig extends SpringBootRepositoryRestMvcConfiguration {  
    @Override 
    protected void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) { 
     config.exposeIdsFor(Thing.class); 
    }   
} 

Я вижу, как работает Spring Boot с --debug (как описано в http://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-auto-configuration.html), что моя конфигурация найдена, но она, похоже, не имеет никакого эффекта.

+1

Добавить getter/setter для свойства id? – jst

+0

Если вы добавите геттер и сеттер, он будет работать – ArunM

ответ

0

Джексон работает над геттерами/сеттерами класса, а не с самими переменными-членами. Поэтому, чтобы убедиться, что идентификатор находится в JSON, просто добавьте в него геттер:

@Entity 
public class Thing { 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private long id; //I want this to appear in the RESTful JSON 

    private String someInformation; 

    protected Thing(){}; 

    //this is what is needed 
    public long getId() { return id; } 

    public String getSomeInformation() { return someInformation; } 

    public void setSomeInformation(String someInformation) { this.someInformation = someInformation; } 

} 
Смежные вопросы