springmvc 拦截器 mvc拦截器的问题

博客分类:
本人遇到问题如下:
正确配置完成了springmvc拦截器之后,如果需要在拦截器中,直接返回数据,则返回值为乱码。本人项目编码为UTF-8
一、实现拦截器
package cn.test.
import net.sf.json.JSONO
import org.springframework.web.servlet.ModelAndV
import org.springframework.web.servlet.handler.HandlerInterceptorA
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import java.util.HashM
import java.util.M
* @author zhanghaiwei
* @version 1.0
* @date 16/1/13 上午10:00
public class TestInterceptor extends HandlerInterceptorAdapter {
* controller方法异步开始执行时就开始执行这个方法,而postHandle需要等到controller异步执行完成后再执行。
public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
super.afterConcurrentHandlingStarted(request, response, handler);
* preHandle方法是进行处理器拦截用的,顾名思义,该方法将在Controller处理之前进行调用,SpringMVC中的Interceptor拦截器是链式的,可以同时存在
* 多个Interceptor,然后SpringMVC会根据声明的前后顺序一个接一个的执行,而且所有的Interceptor中的preHandle方法都会在
* Controller方法调用之前调用。SpringMVC的这种Interceptor链式结构也是可以进行中断的,这种中断方式是令preHandle的返
* 回值为false,当preHandle的返回值为false的时候整个请求就结束了。
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Map&String, Object& result = new HashMap&String, Object&();
result.put("error", "这样会返回乱码的^_^");
response.getWriter().write(JSONObject.fromObject(result).toString());
response.getWriter().close();
//立即返回
* 这个方法只会在当前这个Interceptor的preHandle方法返回值为true的时候才会执行。postHandle是进行处理器拦截用的,它的执行时间是在处理器进行处理之
* 后,也就是在Controller的方法调用之后执行,但是它会在DispatcherServlet进行视图的渲染之前执行,也就是说在这个方法中你可以对ModelAndView进行操
* 作。这个方法的链式结构跟正常访问的方向是相反的,也就是说先声明的Interceptor拦截器该方法反而会后调用,这跟Struts2里面的拦截器的执行过程有点像,
* 只是Struts2里面的intercept方法中要手动的调用ActionInvocation的invoke方法,Struts2中调用ActionInvocation的invoke方法就是调用下一个Interceptor
* 或者是调用action,然后要在Interceptor之前调用的内容都写在调用invoke之前,要在Interceptor之后调用的内容都写在调用invoke方法之后。
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
super.postHandle(request, response, handler, modelAndView);
* 该方法也是需要当前对应的Interceptor的preHandle方法的返回值为true时才会执行。该方法将在整个请求完成之后,也就是DispatcherServlet渲染了视图执行,
* 这个方法的主要作用是用于清理资源的,当然这个方法也只能在当前这个Interceptor的preHandle方法的返回值为true时才会执行。
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
super.afterCompletion(request, response, handler, ex);
二、配置拦截器
&mvc:interceptors&
&mvc:interceptor&
&mvc:mapping path="/**"/&
&bean class="cn.test.interceptor.TestInterceptor"&&/bean&
&/mvc:interceptor&
&/mvc:interceptors&
三、解决乱码问题
在响应header中添加编码:
* preHandle方法是进行处理器拦截用的,顾名思义,该方法将在Controller处理之前进行调用,SpringMVC中的Interceptor拦截器是链式的,可以同时存在
* 多个Interceptor,然后SpringMVC会根据声明的前后顺序一个接一个的执行,而且所有的Interceptor中的preHandle方法都会在
* Controller方法调用之前调用。SpringMVC的这种Interceptor链式结构也是可以进行中断的,这种中断方式是令preHandle的返
* 回值为false,当preHandle的返回值为false的时候整个请求就结束了。
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Map&String, Object& result = new HashMap&String, Object&();
result.put("error", "经过转换之后就不是乱码了^_^");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Type", "text/charset=UTF-8");//这句话是解决乱码的
response.getWriter().write(JSONObject.fromObject(result).toString());
response.getWriter().close();
//立即返回
参考文章地址:
SpringMVC中使用Interceptor拦截器顺序等:http://blog.csdn.net/ufo2910628/article/details/
Spring MVC 中 HandlerInterceptorAdapter的使用:http://blog.csdn.net/liuwenbo0920/article/details/7283757
SpringMVC记录系统日志的几种方式:http://www.cnblogs.com/wang3680/p/4863661.html
forestqqqq
浏览: 80027 次
来自: 北京
第8,“内部类名.this.属性名”,应该改为“外部类名.th ...
挺不错,讲解很详细
kongxuan 写道在项目中用过xstream,后来随着接口 ...
在项目中用过xstream,后来随着接口访问量变大,xstre ...
这玩意效率不高,对于高并发应用不合适。
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'Access denied | www.supmen.com used Cloudflare to restrict access
Please enable cookies.
What happened?
The owner of this website (www.supmen.com) has banned your access based on your browser's signature (3ea69ffed5911e8f-ua98).&>&SpringMVC 中的拦截器与异常处理
SpringMVC 中的拦截器与异常处理
上传大小:2.04MB
极客学院java中级课程,SpringMVC系列教材——SpringMVC 中的拦截器与异常处理
综合评分:0(0位用户评分)
下载个数:
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有0条
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
SpringMVC 中的拦截器与异常处理
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
(仅够下载10个资源)
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
SpringMVC 中的拦截器与异常处理浅析java中 Spring MVC 拦截器作用及其实现
转载 & & 投稿:wbb
本篇文章主要介绍了java中SpringMVC 拦截器的使用及其实例,需要的朋友可以参考
拦截器的实现
1、编写拦截器类实现HandlerInterceptor接口;
2、将拦截器注册进springmvc框架中;
3、配置拦截器的拦截规则;
其他实现方法
WebRequestInterceptor接口:
与上一个的区别是参数区别和prehandle的方法没有返回值。没有上一个功能全,因此常用第一个。
拦截器的使用场景
&处理所有请求共性问题:
1、乱码问题:用request,response参数去设置编码;
2、解决权限验证问题(是否登陆,取session对象查看);
拦截器与过滤器的区别
1、拦截器Interceptor依赖于框架容器,基于反射机制,只过滤请求;
2、过滤器Filter依赖于Servlet容器,基于回调函数,过滤范围大;
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import org.springframework.web.servlet.HandlerI
import org.springframework.web.servlet.ModelAndV
public class TestInterceptor implements HandlerInterceptor {
* 返回值说明是否需要将当前的请求拦截下来
* false:请求将被终止
* true:请求会被继续运行
* Object handler 表示的是被拦截的请求的目标对象
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("TestInterceptor.preHandle()");
* modelAndView:
可以通过modelAndView参数改变显示的视图,或者修改发往视图的方法
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("TestInterceptor.postHandle()");
* 在视图加载完毕之后调用
* 常用于作于资源的销毁,流等
* 类似于析构函数
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("TestInterceptor.afterCompletion()");
注册方式:
在springmvc的Dispatcherservlet配置文件中加入拦截器代码;
&!-- 注册拦截器 --&
&mvc:interceptors&
&!-- 单个拦截器:设置具体的拦截路径 --&
&mvc:interceptor&
&mvc:mapping path="/courses/view2/*"&
&bean class="com.cc.mvcdemo.interceptor.TestInterceptor"&&/bean&
&/mvc:mapping&&/mvc:interceptor&
&!-- 第二种方式:拦截经过当前Dispatcherservlet的所有请求 --&
&bean class="com.cc.mvcdemo.interceptor.TestInterceptorTwo"&&/bean&
&/mvc:interceptors&
希望本篇文章内容对各位朋友有所帮助
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具spring mvc拦截器获取参数问题 - 简书
spring mvc拦截器获取参数问题
一:拦截器对于参数的验证问题
问题场景:
由于之前的参数验证都是放在参数体里面,没有放到方法参数上或者头部,请求数据参数格式为json所以对于所有的接口,我需要验证这公共部分的正确与否,所以我现在需要对请求到controller之前进行拦截,并进行这部分公共参数的验证,所以本身最先想到了两种方案时使用过滤器,要么使用拦截器,但是做的过程中得到第三种方案。具体见下
二、尝试方案之使用拦截器
2.1先上代码如下:
public class AuthInterceptor extends HandlerInterceptorAdapter {
private static final Logger log = Logger.getLogger(AuthInterceptor.class);
//本来时打算在这里面获取到参数,然后对公共部分进行验证
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
String token = request.getParameter("appId");;
if(StringUtils.isblack(token)){
//使用流写出对象,提示token不能为空;
ResultBean result = new ResultBean("10001","token不能为空")
StringBuffer sb = new StringBuffer();
InputStreamReader isr = new InputStreamReader(request.getInputStream());
BufferedReader br = new BufferedReader(isr);
String s = "";
while ((s = br.readLine()) != null) {
sb.append(s);
System.out.println(sb.toString());
if(handler instanceof HandlerMethod){
HandlerMethod handlerMethod = (HandlerMethod)
MethodParameter[] methodParameters = handlerMethod.getMethodParameters();
for(MethodParameter methodParameter : methodParameters){
System.out.println(methodParameter.getParameterName());
xml中配置如下:
&mvc:interceptors&
&mvc:interceptor&
&mvc:mapping path="/*.cgi"/&
&mvc:mapping path="/test/*.cgi"/&
&bean class="com.mouse.moon.common.auth.AuthInterceptor"&&/bean&
&/mvc:interceptor&
&/mvc:interceptors&
上述代码部分,可以看出,我在preHandle(...) 方法中想获取参数,然后
在这里面做统一的验证,成功则继续望下走,失败则直接以流的形式写出
错误对象。在前面的问题中已经说明,参数是以json的格式传入到后台,
并且功能部分都是放在json的数据中,所以这里request获取到的数据为
2.2 :看到注释一中的代码,我在这里使用流的形式来读取到请求数据,然后此时我获取到相关的参数,可是当我继续往下走时,请求到达controller却报错,错误的意思大致就是说流没了,因为我们在拦截器里面读取了流,所以在controller中没办法再次读取流了,使得其直接抛出异常。异常如下:
org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public com.mouse.moon.common.bean.ResultBean com.mouse.person.controller.PersonController.getPersonInfo(com.mouse.moon.common.bean.ParameBean) throws com.mouse.moon.common.exception.ExceptionAbstract
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:151)
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:125)
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:78)
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:162)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:129)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:814)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:737)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2466)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2455)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
主要是“Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing:”
所以我就在想,那么此时我们既然读到了流,然后再把流写出不就可以了,可是我查阅了下资料,发现拦截器没办法进行这操作,倒是过滤器时可以获取到流后再写回去。
然后我又试验了网上说的使用注释二的代码进行参数获取,结果获取的参数都是空的。
所以至此,使用拦截器来做参数验证这一步基本上宣告失败了,必须得另外处理方式,所以打算使用过滤器,但是再解决的过错中跟朋友交流了下,说到有这么一个注解 @ControllerAdvice结合HttpEntity&String& 来使用,我就转门去看了下,得到了我最后的解决方案,当然,过滤器的查到的资料可以试试
三、使用spring的注解 @ControllerAdvice
3.1: @ControllerAdvice说明
该注解时再spring3.2之后增加的,见名大概意思是控制器增强。
@ControllerAdvice注解内部使用@ExceptionHandler、@InitBinder、@ModelAttribute注解的方法应用到所有的 @RequestMapping注解的方法。
我这里使用了结合的方式使用,@ModelAttribute结合@ExceptionHandler进行结合使用,现在@ModelAttribute中进行参数获取,然后转换为相应的对象,获取后对参数进行验证,但是验证失败后我们要怎么处理了,这里面没办法返回错误码呀,所以如果验证失败就抛出异常,然后再@ExceptionHandler中进行统一处理。验证通过就吧获取的参数返回即可,那么此时在controller中获取参数需要使用@ModelAttribute进行获取。代码如下:
@ControllerAdvice
public class ValidateControllerAdvice {
private static final Logger log = Logger.getLogger(ValidateControllerAdvice.class);
@ModelAttribute
public ParameBean getBobyInfo(HttpEntity&String& httpEntity,HttpServletRequest request,HttpServletResponse response) throws JsonParseException, JsonMappingException, IOException, CommonValidateException {
//获取参数
String data = httpEntity.getBody();
ObjectMapper objectMapper =
new ObjectMapper();
ParamBean paramBean = data != null ? objectMapper.readValue(data, ParamBean.class) :
if (pb != null)
String secretId = paramBean.getSecretId();
String token = paramBean.getToken();
if(StringUtils.isBlank(secretId)){
throw new ValidateException( Enums.ERROR_SECRETID_NOTNULL,
"SECRETID不能为空");
}else if(StringUtils.isBlank(token)){
throw new ValidateException( Enums.ERROR_TOKEN_NOT_NULL,
"token不能为空");
}else if(validate(token)){
throw new ValidateException( Enums.ERROR_TOKEN_INVALID,
"无效的token");
return paramB
//捕获ValidateException的异常,统一返回
@ExceptionHandler({ValidateException.class})
@ResponseBody
public ResultBean validateException(ValidateException ex){
ResultBean result = new ResultBean();
result.setResultCode(ex.getResultCode());
result.setResultMsg(ex.getResultMsg());
几天后,测试发现了一个问题,就是比如我的返回数据,我想转换时间不反回长整形,而是"yyyy-MM-dd HH:mm:ss"的形式,所以我使用jackson的配置方案如下
&mvc:annotation-driven&
&mvc:message-converters&
&bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"&
&property name="objectMapper"&
&bean class="com.fasterxml.jackson.databind.ObjectMapper"&
&property name="serializationInclusion" value="NON_NULL"/&
&property name="dateFormat"&
&bean class="java.text.SimpleDateFormat"&
&constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" /&
&/property&
&/property&
&property name="supportedMediaTypes"&
&value&application/charset=UTF-8&/value&
&/property&
&/mvc:message-converters&
&/mvc:annotation-driven&
测试得到的结果是
org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Can not deserialize instance of java.lang.String out of START_OBJECT token
at [Source: java.io.PushbackInputStream@3a4f5e0b; line: 1, column: 1]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token
at [Source: java.io.PushbackInputStream@3a4f5e0b; line: 1, column: 1]
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:224)
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:208)
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:197)
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:141)
at org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor.resolveArgument(HttpEntityMethodProcessor.java:123)
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:78)
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:162)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:129)
at org.springframework.web.method.annotation.ModelFactory.invokeModelAttributeMethods(ModelFactory.java:136)
at org.springframework.web.method.annotation.ModelFactory.initModel(ModelFactory.java:109)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:792)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:737)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2466)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2455)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token
at [Source: java.io.PushbackInputStream@3a4f5e0b; line: 1, column: 1]
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)
at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:762)
at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:59)
at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:12)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3066)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2221)
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:221)
... 44 more
16:47:28 [ http-apr-8080-exec-6:20921 ] - [ DEBUG ] Resolving exception from handler [public com.mouse.common.bean.ResultBean com.mouse.person.controller.PersonController.getPersonInfo(com.mouse.common.bean.ParameBean)]: org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Can not deserialize instance of java.lang.String out of START_OBJECT token
at [Source: java.io.PushbackInputStream@3a4f5e0b; line: 1, column: 1]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token
at [Source: java.io.PushbackInputStream@3a4f5e0b; line: 1, column: 1]
16:47:28 [ http-apr-8080-exec-6:20921 ] - [ DEBUG ] Resolving exception from handler [public com.mouse.common.bean.ResultBean com.mouse.person.controller.PersonController.getPersonInfo(com.mouse.common.bean.ParameBean) throws com.mouse.common.exception.ExceptionAbstract]: org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Can not deserialize instance of java.lang.String out of START_OBJECT token
at [Source: java.io.PushbackInputStream@3a4f5e0b; line: 1, column: 1]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token
at [Source: java.io.PushbackInputStream@3a4f5e0b; line: 1, column: 1]
16:47:28 [ http-apr-8080-exec-6:20921 ] - [ DEBUG ] Resolving exception from handler [public com.mouse.common.bean.ResultBean com.mouse.person.controller.PersonController.getPersonInfp(com.mouse.common.bean.ParamBean)]: org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Can not deserialize instance of java.lang.String out of START_OBJECT token
at [Source: java.io.PushbackInputStream@3a4f5e0b; line: 1, column: 1]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token
at [Source: java.io.PushbackInputStream@3a4f5e0b; line: 1, column: 1]
16:47:28 [ http-apr-8080-exec-6:20921 ] - [ WARN ] Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Can not deserialize instance of java.lang.String out of START_OBJECT token
at [Source: java.io.PushbackInputStream@3a4f5e0b; line: 1, column: 1]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token
at [Source: java.io.PushbackInputStream@3a4f5e0b; line: 1, column: 1]
16:47:28 [ http-apr-8080-exec-6:20921 ] - [ DEBUG ] Null ModelAndView returned to DispatcherServlet with name 'SpringMVC': assuming HandlerAdapter completed request handling
16:47:28 [ http-apr-8080-exec-6:20922 ] - [ DEBUG ] Successfully completed request
想把所有的时间都转换了,但是发现这个在我接收参数的时候都有异常。今天在某位大神的指导下发现了问题所在,我们在加了转换器后,在发送请求的时候会讲json数据使用MappingJackson2HttpMessageConverter此类进行转换,那么到了HttpEntity时已经是对象了但是我们却还是使用HttpEntity&String&接收
所以一直抱上面的错误,转换异常。所以我们可以尝试如下
ObjectMapper objectMapper = new ObjectMapper();
String json="{\n"+"\t\"appId":"\"123567\",\n"+"\t\"appcode":"\"sdasfa\"+"}";
objectMapper.readValue(json,String.class);
此时就会报错如上。所以接收点需要修改为HttpEntity&ParamEngine&的写法,接收处就不需要在转换类型,getBody()后就是ParamEngine对象。
五:浩学习
\/\_/ |____/|___|
走在自己的路上,遇到要遇到的人,经历要经历的事,这才是我们需要面对的。努力,come on!!!
公元号凌晨00点35分
No one is really busy in this world, it’s always about priorities. You will always find time for the things you feel important.
Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgbook/spring-boot-reference-guide-zh/details带目录浏览地址:http://www.maoyupeng.com/sprin...
在前面我们搭建了基本的Spring Web MVC环境,并配置了一个控制器。下面我们来详细学习一下控制器。控制器的主要作用就是处理特定URL发过来的HTTP请求,然后进行业务逻辑处理,将结果返回给某个特定的视图。 处理请求 我们在前面定义了如下一个控制器。在Spring中定...
Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式...
Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、 视图渲染、本地化、时区与主题渲染等,甚至还能支持文件上传。处理器是你的应用中注解了@Controlle...
控制器的主要作用就是处理特定URL发过来的HTTP请求,然后进行业务逻辑处理,将结果返回给某个特定的视图。 处理请求 在Spring中定义控制器非常简单,新建一个类然后应用@Controller注解即可,当然一般习惯上将控制器类也命名为XXController。 每个控制器...
酱紫说会不会很贱。。 因为我是踩助力车的风一样的素面女子一枚。塞车的时候,我感觉特别美妙,美妙得我忍不住赞美一下自个踩车这一溜烟儿的感觉,比共享单车爽了个去。。绿色出行就不在话下,拉风率还挺高的,因为我从小到大自个走街上从来没人跟我搭过讪,上两个月骑助力车后就被人问了不下十...
使用说明: 1、投资有风险,理财须谨慎,石头只挖坑,管杀不管埋,仅提供投资产品参考,不对投资结果负责。 2、货币基金有类比银行存款的安全性,是最常用的活期理财产品,通常情况本息安全。 3、非货币基金有亏损本金风险,且不建议短期投资,比较适合至少有半年以上投资计划的投资者。 ...
时间永远抓不住 爱的人远走 年轮也变不走 分别的心酸 即使是小小的离别 舍不得 还是会被无限的放大 你的不喜欢 其实就是我的喜欢 你的小心思 就是你走后 我的怀念 我会勾画你 长大的样子 来年相见时的场景 但 最怕离别 离别最伤 愿明月清风 相随 你们的样子不变 愿你们安好...
南充英语培训学校排行榜!首选【尚书坊教育】! 南充英语培训学校咨询热线:(刘老师) 英语和语文一样都是语言,刚开始肯定很陌生,因为我们生活的圈子都是汉语,根本没有良好的英语语言环境。但是,对于高三同学来说,哪怕对英语不感兴趣,高考在即,英语作为单独考察...}

我要回帖

更多关于 springmvc 登录拦截器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信