Включение автоматической сериализации Spring Data breaks в приложении Spring Boot - PullRequest
0 голосов
/ 14 ноября 2018

Недавно я добавил Spring-data в свой проект, а затем обнаружил, что в моих контроллерах REST мои модели, предоставляемые клиентами, больше не сериализуются автоматически из JSON. Как я могу это исправить?

Я добавил:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>

и теперь в параметре User отсутствует конструктор String arg, а u равен нулю!

@PostMapping()
@ResponseBody
public User createUser(HttpServletRequest request, @RequestParam("user") User u) {

    log.info("Got user! " + u);

    users.save(u);
    Optional<User> found = users.findById(u.getEmail());
    log.info("Saved user!! ");

    return found.get();
}

1 Ответ

0 голосов
/ 14 ноября 2018

Если вы строите ваш .war с spring-data, запускаете java -jar <path-to-war> --debug, а затем собираете / запускаете его без spring-data и выводите результаты, вы можете видеть, что следующие bean-компоненты включаются, когдаДобавлены данные Spring.

  SpringDataWebAutoConfiguration matched:
      - @ConditionalOnClass found required classes 'org.springframework.data.web.PageableHandlerMethodArgumentResolver', 'org.springframework.web.servlet.config.annotation.WebMvcConfigurer' (OnClassCondition)
      - found ConfigurableWebEnvironment (OnWebApplicationCondition)
      - @ConditionalOnMissingBean (types: org.springframework.data.web.PageableHandlerMethodArgumentResolver; SearchStrategy: all) did not find any beans (OnBeanCondition)

   SpringDataWebAutoConfiguration#pageableCustomizer matched:
      - @ConditionalOnMissingBean (types: org.springframework.data.web.config.PageableHandlerMethodArgumentResolverCustomizer; SearchStrategy: all) did not find any beans (OnBeanCondition)

   SpringDataWebAutoConfiguration#sortCustomizer matched:
      - @ConditionalOnMissingBean (types: org.springframework.data.web.config.SortHandlerMethodArgumentResolverCustomizer; SearchStrategy: all) did not find any beans (OnBeanCondition)

Это потому, что данные Spring предоставляют контроллеры REST, которые ссылаются на ваши репозитории данных, как упомянуто здесь: http://spring.io/projects/spring-data-rest, и это нарушает автоматические конфигурации по умолчанию для сериализации объектов.передан в контроллеры REST.

Просто исключите автоматическую настройку, и ваша существующая автоматическая сериализация будет работать:

@SpringBootApplication(exclude = { SpringDataWebAutoConfiguration.class })
public class MyApplication{

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...