请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

不管是否出异常resolveException方法都会被调用,ret返回false,data都为null

六月 10, 2018 3:51:45 下午 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping register

信息: Mapped "{[/test/validate.json]}" onto public com.mmall.common.JsonData com.mmall.controller.TestController.validate(com.mmall.param.TestVo) throws com.mmall.exception.ParamException

//img1.sycdn.imooc.com//szimg/5b1cdbeb0001717213210544.jpg

正在回答

3回答

Jimin 2018-06-11 10:41:25
你的问题,我理解下来是:无论什么请求,都会调用HttpInterceptor里的preHandle吧(你的日志截图里我看到这个方法被调用了),如果是,那么你看看是否是HttpInterceptor的preHandle里return false了
0 回复 有任何疑惑可以回复我~
  • 提问者 qq_HKT_0 #1
    感谢老师的回复,之前我的描述有问题,不过现在已经解决了。之前是不管怎么样都会调用SpringExceptionResolver这个类的方法resolveException,因此自然而然会将前面的数据给覆盖掉。我就把捕获异常的这个类给屏蔽掉,报出No converter found for return value of type这个错误,我根据这个错误去找答案,发现是因为get方法没有发挥作用。进而定位到@Setter@Getter这个注解没有产生作用,于是我手动生成get/set方法,就解决了。不知道为什么@Setter/@Getter注解无法作用在eclipse上、同样的情况还有我加了@Slf4j 这个注解,log对象也无法使用。
    回复 有任何疑惑可以回复我~ 2018-06-11 20:33:48
  • Jimin 回复 提问者 qq_HKT_0 #2
    哦,那应该是没安装lombok插件,具体可以参考 问题汇总手记:http://www.imooc.com/article/21449
    回复 有任何疑惑可以回复我~ 2018-06-11 20:36:03
提问者 qq_HKT_0 2018-06-10 20:33:10
package com.mmall.common;


import com.mmall.exception.ParamException;
import com.mmall.exception.PermissionException;

import ch.qos.logback.classic.Logger;
import lombok.extern.slf4j.Slf4j;


import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

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

@Slf4j  
public class SpringExceptionResolver implements HandlerExceptionResolver {

	public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
			Exception ex) {
		 String url = request.getRequestURL().toString();
	        ModelAndView mv;
	        String defaultMsg = "System error";

	        // 这里我们要求项目中所有请求json数据,都使用.json结尾
	        if (url.endsWith(".json")) {
	            if (ex instanceof PermissionException || ex instanceof ParamException) {
	                JsonData result = JsonData.fail(ex.getMessage());
	                System.out.println("SpringExceptionResolver:url.endsWith(.json)+1");
	                mv = new ModelAndView("jsonView", result.toMap());
	            } else {
	            //  log.error("unknown json exception, url:" + url, ex);
	                JsonData result = JsonData.fail(defaultMsg);
	                System.out.println("SpringExceptionResolver:url.endsWith(.json)+2");
	                mv = new ModelAndView("jsonView", result.toMap());
	            }
	        } else if (url.endsWith(".page")){ // 这里我们要求项目中所有请求page页面,都使用.page结尾
	           // log.error("unknown page exception, url:" + url, ex);
	            JsonData result = JsonData.fail(defaultMsg);
	            System.out.println("SpringExceptionResolver:url.endsWith(.page)+3");
	            mv = new ModelAndView("exception", result.toMap());
	        } else {
	           // log.error("unknow exception, url:" + url, ex);
	            JsonData result = JsonData.fail(defaultMsg);
	            System.out.println("SpringExceptionResolver:url.endsWith(.page)+4");
	            mv = new ModelAndView("jsonView", result.toMap());
	        }

	        return mv;
	}
	


}
package com.mmall.exception;

public class ParamException extends RuntimeException {
    public ParamException() {
        super();
    }

    public ParamException(String message) {
        super(message);
    }

    public ParamException(String message, Throwable cause) {
        super(message, cause);
    }

    public ParamException(Throwable cause) {
        super(cause);
    }

    protected ParamException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
	<context:annotation-config />

	<!-- 启动注解驱动的spring mvc 功能 -->
	<mvc:annotation-driven />



	<!-- 启动包扫描功能 -->
	<context:component-scan base-package="com.mmall.controller" />
	<context:component-scan base-package="com.mmall.service" />
	
	<mvc:interceptors>
		<bean class="com.mmall.common.HttpInterceptor"/>
	</mvc:interceptors>
	
	<bean class="com.mmall.common.ApplicationContextHelper" lazy-init="false"/>
	
    <bean class="com.mmall.common.SpringExceptionResolver"/>
	
	<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />

	<bean id="jsonView"
		class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />

	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/views/" />
		<property name="suffix" value=".jsp" />
	</bean>

</beans>
package com.mmall.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.mmall.common.ApplicationContextHelper;
import com.mmall.common.JsonData;
import com.mmall.dao.SysAclModuleMapper;
import com.mmall.exception.ParamException;
import com.mmall.model.SysAclModule;
import com.mmall.param.TestVo;
import com.mmall.util.BeanValidator;

import ch.qos.logback.classic.Logger;
import lombok.extern.slf4j.Slf4j;

@Controller
@RequestMapping("/test")
@Slf4j
public class TestController {
	
	@ResponseBody
	@RequestMapping("Test.json")
	public JsonData hello() {
		// log.info("hello");
		System.out.println("Controller");
		return JsonData.success("hello permission");
	}

    @RequestMapping("/validate.json")
    @ResponseBody
    public JsonData validate(TestVo vo) throws ParamException {
    	System.out.println(vo.toString());
        //log.info("validate");
    	System.out.println("validata方法被加载了");
        SysAclModuleMapper moduleMapper = ApplicationContextHelper.popBean(SysAclModuleMapper.class);
        SysAclModule module = moduleMapper.selectByPrimaryKey(1);
       // log.info(JsonMapper.obj2String(module));
        BeanValidator.check(vo);
        return JsonData.success("test validate");
    }
  
}


0 回复 有任何疑惑可以回复我~
Jimin 2018-06-10 18:58:44

你好,麻烦贴一下这个类的代码和相关的配置

0 回复 有任何疑惑可以回复我~
  • 提问者 qq_HKT_0 #1
    我是按照视频去写,基本没改动。。。
    回复 有任何疑惑可以回复我~ 2018-06-10 21:11:46
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信