`
leobluewing
  • 浏览: 241016 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

SpringMVC3 rest服务 相关知识点记录

 
阅读更多
最近重新回头做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+hibernate rest 架构

    下面我们将详细探讨这些知识点。 1. **SpringMVC**:Spring MVC是Spring框架的一个模块,它提供了模型-视图-控制器(MVC)架构,用于分离应用程序的业务逻辑、数据和用户界面。在SpringMVC中,控制器负责处理HTTP...

    SpringMvc_RestfullAPI

    ### 主要知识点 1. **注解驱动编程**:SpringMvc中的注解如`@RestController`、`@RequestMapping`、`@GetMapping`、`@PostMapping`等,使得开发者能以声明式的方式定义路由和HTTP方法映射,大大简化了代码。 2. **...

    activiti+springMVC+mybatis rest风格整合demo

    这个项目对于初学者来说是一个很好的学习资源,因为它涵盖了多个热门技术和实践方式,下面将详细阐述其中涉及的主要知识点。 首先,Activiti是一款开源的工作流引擎,它能够帮助开发者在应用中实现复杂的业务流程...

    SpringMVC PPT_springmvc_

    SpringMVC 是一款基于 Java 的轻量级 Web 开发框架,它是 Spring ...通过理解并熟练掌握上述知识点,开发者可以构建出高效、可维护的 Web 应用程序。本教程的 PPT 将详细讲解这些内容,帮助你快速上手 SpringMVC 开发。

    springMVC教案.rar

    这份教案将涵盖以上各个知识点,并可能包括实践案例和代码示例,帮助初学者理解SpringMVC的工作原理,掌握如何构建和调试SpringMVC应用。通过学习,你可以了解到如何利用SpringMVC的强大功能来构建高效、可维护的Web...

    dubbox + springmvc 2017整合最新版

    【标题】"dubbox + springmvc 2017整合最新版"涉及的主要知识点是分布式服务框架dubbox与Spring MVC的集成应用。dubbox是阿里巴巴开源的一个基于Java的RPC框架,它在dubbo的基础上增加了更多的特性,如REST支持、...

    SpringMVC整合jdbcTemplate实例

    我们将主要关注以下知识点: 1. **SpringMVC框架**:SpringMVC是Spring框架的一个模块,主要用于构建Web应用程序。它提供了模型-视图-控制器(MVC)架构,简化了Java Web开发,通过DispatcherServlet、ModelAndView...

    SpringMVC的Restful风格Demo

    让我们深入探讨一下SpringMVC如何实现RESTful风格以及相关知识点。 首先,理解RESTful的基本原则至关重要。REST(Representational State Transfer)的核心理念是将网络资源作为服务的主体,通过统一的接口进行操作...

    springMVC jar 包

    下面将详细介绍SpringMVC的关键知识点以及在实际开发中的应用。 1. **模型-视图-控制器(MVC)模式**:SpringMVC是MVC设计模式的一种实现,它将业务逻辑、数据展示和用户交互分离开来,提高了代码的可维护性和可...

    springmvc课堂笔记(两天)

    SpringMVC是Spring框架的一个模块,专为构建Web...这些知识点的掌握,将使你具备基本的SpringMVC开发能力,能够构建高效、可维护的Web应用程序。通过持续的学习和实践,你将进一步提升在SpringMVC框架下的开发技能。

    cxf+SpringMVC实例

    综上所述,"cxf+SpringMVC实例"是一个综合性的项目,涵盖了Web服务开发、Maven项目管理、SpringMVC控制器编写以及CXF与Spring的集成等多个知识点。开发者需要具备这些技能才能顺利进行项目的搭建和扩展。

    springmvc教程

    Spring MVC 是一款强大的Java Web开发框架,用于构建高效、可维护的Web应用程序。它作为Spring框架的一部分,提供了模型-视图-控制器...通过这两个课堂笔记,你可以系统地了解和实践这些知识点,提升你的Web开发技能。

    SpringMVC部分【第2天相关资料及源代码】.

    在深入探讨SpringMVC的知识点之前,让我们先理解一下MVC模式的基本概念。MVC模式将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)。模型处理业务逻辑,视图负责展示数据,而控制器...

    SpringMVC4教程-超权威--超详细

    ### SpringMVC4教程知识点详解 #### 一、SpringMVC概述 - **SpringMVC简介**:SpringMVC作为Spring框架的一部分,是基于MVC(Model-View-...以上就是SpringMVC4教程的相关知识点详解,希望对学习SpringMVC有所帮助。

    看透springMvc源代码分析与实践.pdf

    在本书中,我们将探讨以下几个关键知识点: 1. **SpringMVC概述**:SpringMVC是一个基于模型-视图-控制器(MVC)设计模式的轻量级Web框架,它简化了Java Web应用的开发。它提供了请求处理、视图渲染、数据绑定和...

    SpringMVC互联网软件架构REST使用详解

    本文主要介绍了SpringMVC互联网软件架构REST的相关知识点,涵盖REST的定义、资源、表现层、状态转化、HTTP协议、GET、POST、PUT、DELETE请求等概念,以及如何使用HiddenHttpMethodFilter过滤器来实现REST风格的访问...

    SpringMVC面试专题及答案.zip

    SpringMVC是Java Web开发中广泛使用的MVC(Model-View-Controller)框架,由Spring Software Foundation维护。它为开发者提供了构建Web应用...深入学习和掌握这些知识点,将有助于提升你在Java Web开发领域的专业技能。

    SpringMVC学习笔记与项目源码

    内容概要:超详细SpringMVC笔记,包含初始SpringMVC,请求与响应,REST风格,SSM整合,表现层数据封装,异常处理器,项目异常处理方案,前后台联调,拦截器等知识点适合人群:学习过Spring课程的人群,初步理解框架...

    springMVC+mybatis

    **Spring MVC 知识点** 1. **模型-视图-控制器(MVC)架构**:Spring MVC 提供了一个分层架构,将业务逻辑、数据处理和用户界面分离。模型(Model)负责业务逻辑,视图(View)处理展示,控制器(Controller)协调...

Global site tag (gtag.js) - Google Analytics