在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  C/ springboot中@EnableWebMvc的正確使用姿勢是什么?

springboot中@EnableWebMvc的正確使用姿勢是什么?

1.描述
我用springboot整合了swagger,同時又做了文件上傳的功能。代碼如下(代碼功能沒有問題,已測試過):

//文件上傳
@Api(value = "文件上傳", description = "文件上傳API")
@RestController
public class UploadController {

    @Autowired
    private FileUploadService fileUploadService;

    @ApiOperation(value = "文件上傳", notes = "文件上傳")
    @RequestMapping(value = "/api/upload", method = RequestMethod.POST, consumes = "multipart/form-data")
    public RestResult upload(@RequestParam MultipartFile file) {
        String fileFullPath = fileUploadService.upload(file);
        return RestResultGenerator.getSuccessResult(fileFullPath);
    }

}

//swagger2配置
@ConditionalOnProperty(prefix = "swagger2", value = {"enable"}, havingValue = "1")
@EnableSwagger2
@Configuration
public class Swagger2Config {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.freedom.clothing.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Restful API列表")
                .contact(new Contact("xx", "", ""))
                .version("1.0")
                .description("")
                .build();
    }
}

//DisPatcherServlet配置
@Configuration
@EnableWebMvc//(【開啟,會攔截swagger2頁面】【不開啟,文件上傳不了】)
public class WebMVCConfig extends WebMvcConfigurerAdapter {

    @Bean
    public CommonsMultipartResolver multipartResolver() {
        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
        resolver.setDefaultEncoding("utf-8");
        resolver.setMaxInMemorySize(40960);
        resolver.setMaxUploadSize(10485760);

        return resolver;
    }

}

2.我遇到的問題
①但是,當我開啟@EnableWebMvc注解時,文件能夠上傳,但是swagger2訪問不了。
圖片描述

圖片描述

②而關(guān)閉@EnableWebMvc注解時,swagger2能訪問,文件上傳不了,壓根就不進入upload方法,拋出org.springframework.web.HttpMediaTypeNotSupportedException異常。
圖片描述

圖片描述

3.我想問的問題
我排查到這個原因花了很長時間,之前一直以為是上傳哪里出了問題。

我的思考:
上面加@EnableWebMvc時,顯然swagger的靜態(tài)資源被攔截了,不加@EnableWebMvc就不攔截。

①不都是設(shè)置的DispatcherServlet嗎,兩種情況的mapping映射不同嗎?
②@EnableWebMvc到底起什么作用?為什么有時加或不加貌似都沒什么影響(應該跟springboot的@EnableAutoConfiguration沒什么關(guān)系吧,我沒開啟這個注解)?

回答
編輯回答
憶當年

建議把啟動日志中的mapping打印出來
這兩個是swagger相關(guān)的資源映射
clipboard.png

這是swagger-ui.html的位置,在jar里面
clipboard.png

這個是swagger-ui.html的映射
clipboard.png

2018年9月10日 11:08
編輯回答
小曖昧

開啟@EnableWebMvc時,加入以下代碼,讓DispatcherServlet不攔截swagger的靜態(tài)資源就行了。

    /**
     * 過濾Swagger2的靜態(tài)資源
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");

        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

至于@EnableWebMvc到底做了些什么事情,我還沒搞清楚。

2017年7月6日 09:49