springmvc 使用注意事项

springmvc使用注意事项来自于Insight ,仅作记录:

...

1、springmvc 对于静态文件的处理:

如果DispatcherServlet配置的url-pattern = /*,那么需要对web应用中的静态文件请求需要单独配置,两种方式:

a.配置<mvc:default-servlet-handler />

b.或者配置<mvc:resources location="/static/" mapping="/static/**" /> Insight

上述的a方式会注册SimpleUrlHandlerMapping

loop-up 处理请求的handler 时会遍历DispatcherServlet.handlerMappings,遍历的handlerMappings中,SimpleUrlHandlerMapping肯定是最后匹配,决定顺序是在DispatcherServlet初始化handlerMappings时,对容器中所有的HandleMapping.class 进行sort操作,排序的依据是bean.order

...

2、springmvc 请求出现的400 bad request

如果controller 方法中使用PathVariable RequestBody RequestParam CookieValue 等注解,很有可能会400。

出错原因是:根据request-path 确实找到了对应的handler,但是在解析入参,构造HandlerMethod参数时发生Exception,由DispatcherServlet catch异常并返回。并不会运行到method.invoke,因此加断点是无效的,也看不到异常的栈信息,所以刚开始使用很难调试。

参考:HandlerMethodArgumentResolver ,不同类型的method parameters 委托给对应的解析器实现

需要注意的是:

controller 方法参数类型尽量不要使用原始类型,减少诸如400这样的情况出现。

// 编写controller 注意
private Object handleNullValue(String name, Object value, Class
   
    paramType) {
    if (value == null) {
        if (Boolean.TYPE.equals(paramType)) {
            return Boolean.FALSE;
        }
        else if (paramType.isPrimitive()) {
            throw new IllegalStateException("Optional " + paramType + " parameter '" + name +
                "' is present but cannot be translated into a null value due to being declared as a " +
                "primitive type. Consider declaring it as object wrapper for the corresponding primitive type.");
        }
    }
    return value;
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值