`

未完 Spring MVC

    博客分类:
  • J2EE
阅读更多
   
Annotations for Http params:
@RequestBody
@PathVariable
@RequestParam
@ModelAttribute


@ExceptionHandler & @ControllerAdvice(这个advice注解是在 spring 3.2 之后才有的) 及基于它们两个的 Spring MVC 异常处理
问题: spring MVC 在 json 反序列化(如通过 @RequestBody 反序列化一个 enum)出错时,只返回 400,后台无任何 log!导致错误的排查比较困难。
。。。
http://stackoverflow.com/questions/6175600/spring-mvc-request-body-error-handling
解决:
。。。
http://www.mkyong.com/spring-mvc/spring-mvc-exceptionhandler-example/
http://www.javacodegeeks.com/2013/06/spring-mvc-error-handling-flow.html



Validation:
http://jinnianshilongnian.iteye.com/blog/1733708


Spring MVC 的 单元测试:
1 使用 MockHttpServletRequest & MockHttpServletResponse 等:
http://stackoverflow.com/questions/1401128/how-to-unit-test-a-spring-mvc-controller-using-pathvariable
JSON REST请求的话,参照下面链接设置MappingJacksonHttpMessageConverter:
http://stackoverflow.com/questions/9138555/spring-framework-test-restful-web-service-controller-offline-i-e-no-server-n
需要注意的是,这种方式无法对Controller的@Valid做验证。
2 如果 Spring 版本为 3.1+,可以考虑使用spring-test-mvc,使用它做spring mvc的单元测试,Controller的@Valid可以很好的被验证到:
http://stackoverflow.com/questions/12308213/how-do-i-get-spring-mvc-to-invoke-validation-in-a-junit-test
引入spring-test-mvc的maven依赖后,测试很简单,如下:
        EmailRest controller = applicationContext.getBean(EmailRest.class);
        MockMvc myMockController = MockMvcBuilders.standaloneSetup(controller).build();
        DefaultRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/send").contentType(MediaType.APPLICATION_JSON)
                .body("{\"email\":\"xxx@yyy.com\",\"subject\":\"您有新的好友请求,请登陆处理\",\"tag\":\"contactrequest\",\"content\":\"1234567890\"}".getBytes());
        ResultActions ra = myMockController.perform(requestBuilder);
3 使用 spring 的 restTemplate
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics