【发布时间】:2020-04-03 19:17:39
【问题描述】:
我正在对我的 rest api 进行版本控制。我在这里找到了一个很好的方法:
@RestController
@RequestMapping("/user")
@VersionedResource(media = Version.MEDIA)
public class UserController {
@Autowired
private UserService userService;
@GetMapping("")
@VersionedResource(from = "1.0", to = "1.9")
public String getUser() {
return "user v1";
}
@GetMapping("")
@VersionedResource(from = "2.0")
public String getUserV2() {
return "user v2";
}
效果很好,但要做到这一点,需要一个扩展 WebMvcConfigurationSupport 的类:
@Configuration
public class WebConfiguration extends WebMvcConfigurationSupport {
@Autowired
private ContentNegotiationManager contentNegotiationManager;
@Bean
public RequestMappingHandlerMapping requestMappingHandlerMapping() {
VersionRequestMappingHandlerMapping handlerMapping = new VersionRequestMappingHandlerMapping();
handlerMapping.setOrder(0);
handlerMapping.setRemoveSemicolonContent(false);
handlerMapping.setContentNegotiationManager(contentNegotiationManager);
return handlerMapping;
}
}
这会产生许多奇怪的错误,例如新的 LazyInitializationException、更改日期格式、带有 uri 参数的错误......即使我将这个类留空,它也会产生错误并且版本控制将被禁用。当我评论这个 extends WebMvcConfigurationSupport 时,一切都会再次运行良好,当然,版本控制是禁用的。所以我确定错误来自这里。
所以问题是,为什么 WebMvcConfigurationSupport 会产生错误,我有哪些解决方案?谢谢
【问题讨论】:
-
您是否尝试过 DelegateMvcConfig?
-
是的,同样的奇怪行为
标签: spring rest spring-boot spring-mvc versioning