1. 程式人生 > >spring boot 專案重新搭建----------mvc配置:引數解析

spring boot 專案重新搭建----------mvc配置:引數解析

7.addResourceHandlers靜態資源解析

如:

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

8.addCorsMappings跨域支援

registry.addMapping("/greeting-javaconfig").allowedOrigins("http://localhost:9000");

.addCorsMappings()中的引數代表支援跨域的url,.allowedOrigins()中的引數代表可以訪問該介面的域名,設定為”*”可支援所有域。

9.addViewControllers新增自定義檢視控制器

    // 對 "/hello" 的 請求 redirect 到 "/home"
    registry.addRedirectViewController("/hello", "/home");
    // 對 "/admin/**" 的請求 返回 404 的 http 狀態
    registry.addStatusController("/admin/**", HttpStatus.NOT_FOUND);
    // 將 "/home" 的 請求響應為返回 "home" 的檢視 
    registry.addViewController("/home").setViewName("home");

10.configureViewResolvers配置檢視解析器

enableContentNegotiation啟用內容裁決解析器

11.addArgumentResolvers新增引數解析器

如新增一個JSON解析

實現HandlerMethodArgumentResolver

public class JSONArgumentResolver implements HandlerMethodArgumentResolver {
    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        Class<?> paramType = parameter.getParameterType();
        return JSONObject.class.isAssignableFrom(paramType) || JSONArray.class.isAssignableFrom(paramType);
    }

    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
        Class<?> paramType = parameter.getParameterType();
        String json = webRequest.getParameter(parameter.getParameterName());
        if (JSONObject.class.isAssignableFrom(paramType)) {
            return JSON.parseObject(json);
        } else if (JSONArray.class.isAssignableFrom(paramType)) {
            return JSON.parseArray(json);
        } else {
            Method method = parameter.getMethod();
            throw new UnsupportedOperationException("Unknown parameter type: " + paramType + " in method: " + method);
        }
    }
}
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
        resolvers.add(new JSONArgumentResolver());
}

12.addReturnValueHandlers新增返回值處理

對返回值進行處理,1.處理哪種型別 2.處理邏輯

13.configureMessageConverters 配置訊息轉換

HTTP輸入請求格式向Java物件的轉換;Java物件向HTTP輸出請求的轉換

配置一個FastJson訊息轉換器

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    converters.add(new StringHttpMessageConverter(Charset.forName("UTF-8")));
    FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
    FastJsonConfig fastJsonConfig = new FastJsonConfig();
    fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue);
    fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
    converters.add(fastJsonHttpMessageConverter);
}

14.extendMessageConverters在原有的基礎上拓展,而上面是替換

15.configureHandlerExceptionResolvers配置異常處理解析器

配置一個全域性異常處理

@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler({EntityValidException.class})
    @ResponseBody
    public KeyValue handleForbiddenException(Exception ex) {
        return KeyValue.err(ex.getMessage());
    }

}