2012-09-21 29 views
0

我正在使用Jackson处理器的Spring MVC。当一个JSON请求作为POST请求发送到服务器时,@RequestBody被反序列化到我需要的对象中。发送GET请求时出现问题,它实际上显示Http 500内部服务器错误。时引发的例外是:java.io.EOFException Jackson处理器

java.io.EOFException: No content to map to Object due to end of input 
org.codehaus.jackson.map.ObjectMapper._initForReading(ObjectMapper.java:2022) 
org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:1974) 
org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1331) 
org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.readInternal (MappingJacksonHttpMessageConverter.java:135) 
org.springframework.http.converter.AbstractHttpMessageConverter.read(AbstractHttpMessageConverter.java:154) 
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.readWithMessageConverters(HandlerMethodInvoker.java:633) 
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveRequestBody(HandlerMethodInvoker.java:597) 
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments (HandlerMethodInvoker.java:346) 
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171) 
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426) 
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414) 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

没有emtpy字符串被发送和正确的JSON发送到服务器。我不知道为什么会发生这种情况。下面是我的代码:

JSP - index.jsp的

<%@page language="java" contentType="text/html"%> 
<html> 
<head> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script> 
<script type="text/javascript"> 
$(function() { 
$('#myForm').submit(function() { 
    var form = $(this), 
     url = form.attr('action'), 
     userId = form.find('input[name="userId"]').val(), 
     dat = JSON.stringify({ "userId" : userId }); 

    $.ajax({ 
     url : url, 
     type : "GET", 
     traditional : true, 
     contentType : "application/json", 
     dataType : "json", 
     data : dat, 
     success : function (response) { 
      alert('success ' + response); 
     }, 
     error : function (response) { 
      alert('error ' + response); 
     }, 
    }); 

    return false; 
    }); 
}); 
</script> 
</head> 
<body> 
<h2>Application</h2> 
<form id="myForm" action="/application/user/find" method="GET"> 
    <input type="text" name="userId" value="user1"> 
    <input type="submit" value="Submit"> 
</form> 
     </body> 
</html> 

只要更改请求类型在JSP发布和控制方法,一切似乎都正常工作。

package com.web; 

@Controller 
@RequestMapping("/user/*") 
public class UserController { 

@RequestMapping(value = "find", method = RequestMethod.GET, headers = {"content-type=application/json"}) 
public @ResponseBody UserResponse save(@RequestBody User user) throws Exception { 
    UserResponse userResponse = new UserResponse(); 
       System.out.println("UserId :" + " " + user.getUserId()); 
    return userResponse; 
} 

的beans.xml

<context:component-scan base-package="com.web"/> 

<mvc:annotation-driven/> 

<context:annotation-config/> 

User.java

public class User implements Serializable { 

private String userId; 

public User() { 

} 

// Getters and setters 
} 

当GET请求被发送的broswer通常显示%%用户%%。这只是一个例子。 Jackson处理器是否仍会读取GET请求?

我不知道问题出在哪里。我希望你能帮忙。

回答

1

我读什么数据参数确实在jQuey.ajax下面的说明()确实在http://api.jquery.com/jQuery.ajax/

数据被发送到服务器。它被转换成查询字符串,如果还不是字符串的话。它附加到GET请求的url。 ...

所以它被附加到URL并且没有请求主体。这是一种与GET语义一致的行为,如果你想发布数据使用POST。

+0

好的,谢谢你的帮助。 – user1646481

+0

也许你可以接受答案,如果有帮助? –

+0

谢谢,接受。 – user1646481

相关问题