最近重新回头做j2ee开发,之前一直是struts。既然重新开始做j2ee,怎么也要有点新花样。
于是就研究springmvc的rest来做web service。
其他没什么,主要是记录一下以下的几个关键知识点。
由于是web服务,出现异常必然不可能返回页面给调用者,于是捕捉封装异常成了必然。
于是几个学习点:全局异常捕捉,json方式输出,404的处理。
1.全局异常捕捉:
自己实现一个HandlerExceptionResolver,然后写到配置文件中
比如:
public class RestServiceExceptionHandler extends
DefaultHandlerExceptionResolver{}
同时controller内部也有注解的异常处理。这边有一个异常优先级关系。可以把注解配置的噶一些,这个看个人项目。
2. 404的处理
配置完以后发现有一些默认的404错误还是不会被捕捉到,直接就被spring的dispatchServlet给处理掉了。比如很简单的如下定义的controller的方法:
@ResponseBody
@RequestMapping("/movie/add")
public Object addMovie(
@RequestParam(value="a") String movieName,
@RequestParam(value="b") String movieDirector,
){
this.LOGGER.info("> add date success! <");
Map<String,Object> dataMap = new HashMap<String, Object>();
return dataMap;
}
因为@RequestParam 需要两个参数
如果不小心漏了一个参数,比如:输入了 这样的/xxxxx/movie/add?a=1 路径,那肯定是希望返回json提示,但是结果是直接给我一个404的jsp页面。。。
处理方法:写一个默认的controller来捕捉所有的路径:
@Controller
public class DefaultNoMappingController {
@RequestMapping("/**")
public void unmappedRequest(HttpServletRequest request) {
String uri = request.getRequestURI();
throw new RestServiceException("资源不存在 " + uri,RestErrorCode.uri_not_found.getValue());
}
}
3.json方式输出
直接在doResolveException方法里输出了,网上貌似例子很多。。我随便找了个就用了。不知道算不算正统。。
errorConverter 为异常的转化对象,就是接收异常转化成系统自定义的错误类。
protected ModelAndView doResolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
RestError error = errorResolver.resolveError(request, handler, ex);
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json");
ObjectMapper mapper = new ObjectMapper();
try {
JsonGenerator jsonGenerator = mapper.getJsonFactory()
.createJsonGenerator(response.getOutputStream(),
JsonEncoding.UTF8);
mapper.writeValue(jsonGenerator, errorConverter.convert(error));
} catch (JsonGenerationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JsonMappingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return new ModelAndView();
}
基本上写下来发现最搞不清楚的还是404那块,当时一直不知道怎么处理,甚至于我都想到要复写dispatchServlet了,后来找到老外的一个rest的异常框架,终于了解了。。
老外的那个东东:
介绍:
http://www.stormpath.com/blog/spring-mvc-rest-exception-handling-best-practices-part-1
代码下载:
https://github.com/stormpath/spring-mvc-rest-exhandler
另外最后有一个问题没想通,请看到这个文章并且了解的人解惑:
就是像我那样直接用 response.write来输出json字串和 老外那样用ContentNegotiatingViewResolver配置来输出json 有什么本质区别??
感觉是直接写response.write来输出方便啊,谢谢。
分享到:
相关推荐
SpringMVC构建REST接口的源代码
一个基于SpringMVC的REST用法例子,利用jquery提交REST请求并以JSON格式返回等,完整的依赖包,可以直接运行。
SpringMVC构建REST接口:第四篇 第一个REST风格的接口的源代码
SpringMVC+REST+AngularJS开发框架demo
springmvc中rest风格的增删改查,适合初学者参考
最新的spring框架,4.2.6,实现rest接口,使用maven开发
本人在前辈《从MVC到前后端分离(REST-个人也认为是目前比较流行和比较好的方式)》一文的基础上,实现了一个基于Spring的符合REST风格的完整Demo,具有MVC分层结构并实现前后端分离,该项目体现了一个具有REST风格...
我博客《T4模版生成SpringMVC构造REST代码》的源代码
最详细的Springmvc知识点的 总结 小到 给你举列子说明
使用Spring MVC3基于注解的形式实现的REST小例子 部署运行: 1. 将工程导入eclipse 2. 添加tomcat属性 工程(右键)——> tomcat project——> update context 3. 启动tomcat 4. 在浏览器中输入...
springmvc配置webservice服务的例子,下载直接可以运行,可以参考java的webservice服务的配置
实例:用springmvc框架实现rest风格的json请求和返回接口
使用springmvc实现restful风格,同时整合了threadpool线程池
内容为Java中的SSM框架中的springmvc的搭建过程和知识点介绍,文件为OneNote格式,文件预览见主页相关博文
SpringMVC的上课知识点整理。由上课老师编写的每一个知识点与整合的概要。非常全的整体复习方案, 包括配置与注解的2种方工。需要的赶紧下载
3、REST快速开发 RESTful快速开发(标准开发) @RestController 标准请求动作映射(4种) 4、案例:基于RESTful页面数据交互 5、SSM整合 Spring配置 Spring整合MyBatis Spring整合SpringMVC RESTful标准控制器开发...
springmvc实现httpclient调用服务
SpringMVC3 详细讲解手册。大家可以学习哦
springMVC spring mybatis rest风格架构 根据请求的后缀名 解析成json 或者 xml格式的数据
采用springMVC倒灶的纯rest风格的医院管理系统,利用springMVC的自动注入功能,和最新的mvc:resource标签,可以访问静态资源。值得借鉴。利用maven的构建也更加便于管理jar包,最后是采用了resin 3.1的服务器,有别...