springmvc 통 일 된 이상 처리 차단기 구현

3318 단어 자바springspringMVC
springmvc 는 이상 한 처 리 를 실 현 했 습 니 다. 이상 에 대해 사용자 정의 로 구현 합 니 다.
Simple Mapping Exception Resolver 를 계승 하여 사용자 정의 이상 차단 기 를 실현 합 니 다.
view Name 이 비어 있 는 지 여 부 를 통 해 action 요청 이 ajax 인지 http 인지 판단 합 니 다.


import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;

import com.alibaba.druid.support.json.JSONUtils;

public class MySimpleMappingExceptionResolver extends
		SimpleMappingExceptionResolver {

	@Override
	protected ModelAndView doResolveException(HttpServletRequest request,
			HttpServletResponse response, Object arg2, Exception ex) {
		
		System.out.println("resolver ...");
		
		String viewName = determineViewName(ex, request);
		if (viewName != null) {// JSP    
			if (!(request.getHeader("accept").indexOf("application/json") > -1 || (request
					.getHeader("X-Requested-With") != null && request
					.getHeader("X-Requested-With").indexOf("XMLHttpRequest") > -1))) {
				//         
				// Apply HTTP status code for error views, if specified.
				// Only apply it if we're processing a top-level request.
				Integer statusCode = determineStatusCode(request, viewName);
				if (statusCode != null) {
					applyStatusCodeIfPossible(request, response, statusCode);
				}
				return getModelAndView(viewName, ex, request);
			} else {// JSON    
				try {
					PrintWriter writer = response.getWriter();
					Map map=new HashMap();
					map.put("success", false);
					map.put("msg", ex.getMessage());
					writer.write(JSONUtils.toJSONString(map));
					writer.flush();
				} catch (IOException e) {
					e.printStackTrace();
				}
				return null;

			}
		} else {
			return null;
		}
	}

}



그리고 springmvc 설정 파일 에 사용자 정의 차단 기 를 설정 합 니 다.

<bean id="exceptionResolver"
		class="com.dahafo.demo.resolver.MySimpleMappingExceptionResolver">
		<property name="exceptionMappings">
			<props>
				<prop key="java.lang.SQLException">error/sqlerror</prop>
				<prop key="java.lang.Exception">error/500</prop>
			</props>
		</property>
	</bean>

마지막 으로 srping Controller 에서 이상 을 던 집 니 다.

@RequestMapping(value="/query.html",method=RequestMethod.POST)
	@ResponseBody
	protected Object query(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		EtlUser user = new EtlUser();
		user.setUserName("test");
		if(true)
			throw new SQLException("hello error");
		return user;
	}

좋은 웹페이지 즐겨찾기