SpringMVC ajax请求 - java.io.EOFException:由于输入结束,没有要映射到Object的内容 [英] SpringMVC ajax request - java.io.EOFException: No content to map to Object due to end of input

查看:90
本文介绍了SpringMVC ajax请求 - java.io.EOFException:由于输入结束,没有要映射到Object的内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发SpringMVC应用程序我使用ajax调用从数据库请求了一些数据,数据作为json对象返回。我现在必须将此数据发送回服务器进行一些处理并返回到表单。

I am working on a SpringMVC application i requested some data from the database using an ajax call the data came back as json object. I now have to send this data back to the server for some processing and return to the form.

但是我在浏览器中收到错误遇到的服务器一个内部错误阻止它完成此请求。在调查错误日志时我看到了这一点:

However i am getting an error in the browser The server encountered an internal error that prevented it from fulfilling this request. on investigating the error logs i saw this:

错误日志

Controller [com.crimetrack.web.MapController]
Method [public com.crimetrack.business.Marker com.crimetrack.web.MapController.getNewCoordinates(com.crimetrack.business.Marker) throws java.lang.Exception]

java.io.EOFException: No content to map to Object due to end of input
    at org.codehaus.jackson.map.ObjectMapper._initForReading(ObjectMapper.java:1324)
    at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:1275)
    at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:941)
    at org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.readInternal(MappingJacksonHttpMessageConverter.java:124)
    at org.springframework.http.converter.AbstractHttpMessageConverter.read(AbstractHttpMessageConverter.java:153)
    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:120)
    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:91)
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:71)
    at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:75)
    at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:156)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:117)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)

Ajax Call

 $('#getCoordinates').on('click',function(){

        $.each(global_citizens, function(i, gc){

            $.ajax({
                type:'GET',
                url:'getNewCoordinatesForMarkers.htm',
                contentType: 'application/json',
                data:{citizens:JSON.stringify(global_citizens[i])},
                dataType: 'json',
                success:function(new_citizens){
                       $.each(new_citizens, function(i, c) {

                           console.log(c.name + ' | ' + c.socialSecurityNumber + ' | ' + c.lat+ ' | ' +c.lng);

                        });                                 
                }                           
            });             
        }); 
    });

控制器

@RequestMapping(value = "getNewCoordinatesForMarkers.htm", method = {RequestMethod.GET}, headers = {"content-type=application/json"})
public @ResponseBody  Marker getNewCoordinates(@RequestBody Marker citizens)throws Exception{

    logger.info("Getting Markers");
    Marker citizenMarker = this.markerManager.getNextLocation(citizens);

    return citizenMarker;

}

Marker.java

public class Marker  implements Serializable{

    private int socialSecurityNumber;
    private String name;
    private int citizenType;
    private double lat;
    private double lng;

//getters and setters

JSON DATA -bken from firebug console

JSON DATA -taken from firebug console

citizens{"name":"Jessie Small","lat":10.670044,"lng":-61.515305,"socialSecurityNumber":1999020214,"citizenType":3}

FireBug - 正在传递内容

FireBug - content is being passed

Connection  close
Content-Length  3696
Content-Type    text/html;charset=utf-8
Date    Tue, 07 May 2013 05:52:09 GMT
Server  Apache-Coyote/1.1
Request Headers
Accept  application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Content-Type    application/json
Cookie  tinymcePasteText=1; JSESSIONID=CC4F12D00C836FE0DB86D2493556275C
Host    localhost:8084
Referer http://localhost:8084/crimeTrack/crimeTrackMap.htm
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0
X-Requested-With    XMLHttpRequest


推荐答案

这是对我有用的控制器的改变

This is the change to the controller that worked for me

@RequestMapping(value = "getNewCoordinatesForMarkers.htm", method = {RequestMethod.POST},produces = "application/json; charset=utf-8")
    public @ResponseBody  Marker getNewCoordinates(@RequestBody Marker json)throws Exception{

        JSONObject jsonObj = JSONObject.fromObject(json);

        ObjectMapper mapper = new ObjectMapper();

         Marker citizen = mapper.readValue(jsonObj.toString(), new TypeReference<Marker>(){});


        logger.info("Getting Markers");
        Marker citizenMarker = this.markerManager.getNextLocation(citizen);

        return citizenMarker;

    }

这篇关于SpringMVC ajax请求 - java.io.EOFException:由于输入结束,没有要映射到Object的内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆