У меня есть приложение Spring Boot, в котором я хочу (для начала) определить, является ли мое устройство мобильным или браузерным. Поэтому я подумал, что Spring Mobile - хорошая идея. Проблема в том, что у меня не получается.
КОД:
На основании официальных документов здесь я реализовал следующее:
public class DeviceConfig implements WebMvcConfigurer{
@Bean
public DeviceResolverHandlerInterceptor
deviceResolverHandlerInterceptor() {
return new DeviceResolverHandlerInterceptor();
}
@Bean
public DeviceHandlerMethodArgumentResolver
deviceHandlerMethodArgumentResolver() {
return new DeviceHandlerMethodArgumentResolver();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(deviceResolverHandlerInterceptor());
}
@Override
public void addArgumentResolvers(
List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(deviceHandlerMethodArgumentResolver());
}
}
и в моем контроллере
@RequestMapping("/user/mobile")
@PreAuthorize("hasRole('ROLE_USER') and hasRole('ROLE_MOBILE')")
public ModelAndView routeToUserInterfaceServiceMobile(final RedirectAttributes redirectAttrs,Device device) {
System.out.println(device.isMobile());
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
redirectAttrs.addFlashAttribute("session_userId", userAuthRepository.findByUsername(auth.getName()).getId());
return new ModelAndView("redirect:"+MyConstants.PATH_USER_MOBILE_SERVICE);
}
и дополнения к pom.xml:
<dependency>
<groupId>org.springframework.mobile</groupId>
<artifactId>spring-mobile-device</artifactId>
<version>2.0.0.M3</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
Проблема:
Я могу запустить приложение, но когда я вызываю эту конечную точку, я получаю следующую ошибку:
Не найден основной или конструктор по умолчанию для интерфейса
org.springframework.mobile.device.Device
java.lang.IllegalStateException: нет основного или конструктора по умолчанию
найден для интерфейса org.springframework.mobile.device.Device на
org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttribute (ModelAttributeMethodProcessor.java:219)
в
org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.createAttribute (ServletModelAttributeMethodProcessor.java:84)
в
org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument (ModelAttributeMethodProcessor.java:139)
в
org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument (HandlerMethodArgumentResolverComposite.java:124)
в
org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues (InvocableHandlerMethod.java:165)
в
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest (InvocableHandlerMethod.java:138)
на
Есть что-то еще, чтобы добавить? Или есть что добавить к свойствам пружины?