【问题标题】:Can not deserialize instance of object out of START_ARRAY token无法从 START_ARRAY 令牌中反序列化对象实例
【发布时间】:2016-03-28 00:47:40
【问题描述】:

我想将我的用户发送到服务器并获得一个长号作为响应,但我在客户端收到 400 错误并在服务器端收到此异常:

nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of mashfood.model.User out of START_ARRAY token

我的客户端 sUser 模型与服务器用户模型完全相同:

sUser(或用户):

class User{
public long id;

public String username;

public String password;

public String firstName;

public String lastName;

public String gender;

public String nationalNumber;

public String phoneNumber;

public String address;

public String email;

public boolean isLoggedIn;

public String imageUrl;

public int areaNumber;

}

客户端像这样连接到服务器: ** tClass 是响应的类类型 ** params[0] 是我要发送到服务器的用户 ** url+conditions 是处理获取用户的方法的url

protected ResponseHandler doInBackground(Object... params) {
    try {
        serverResponse=new ServerResponse();
        result = restTemplate.postForObject(URL + conditions, params,tClass);
        serverResponse.singleResult=result;
        serverResponse.isReady=true;
        responseHandler.onServerRespond(serverResponse);
    }catch (Exception e){
        serverResponse.isReady=false;
        serverResponse.message=e.getMessage();
        e.printStackTrace();
    }

    return responseHandler;
}

而服务器端代码是:

@RequestMapping(value = "/register",method = RequestMethod.POST)
@ResponseBody
public Long registerNewUser(@RequestBody User user){
    if(user!=null){
        try {
            System.out.println("REGISTER "+ user==null);
            SessionFactory sessionFactory=HibenateConnection.connectingHibernate();
            Session session=sessionFactory.openSession();
            session.beginTransaction();
            session.save(user);
            session.getTransaction().commit();
            User user1=getUser(user.username);
            session.close();
            return user1.id;
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    return -1l;
}

我的输出 JSON 是:

[{
"address": "",
"areaNumber": 0,
"email": "email",
"firstName": "name",
"gender": "male",
"id": -1,
"imageUrl": "img",
"isLoggedIn": false,
"lastName": "lastn",
"nationalNumber": "898898",
"password": "pass",
"phoneNumber": "936",
"username": "mehdi"
}]

我的问题在哪里?

【问题讨论】:

  • 能否请您发布 JSON 字符串?
  • @Bhokal 是的,我添加到我的问题中
  • 为什么这个投票被关闭为题外话?它包含一个 MCVE。
  • @mehdiakbarian 可能是错误的,我投票重新打开它并且其他人同意。

标签: java json spring post


【解决方案1】:

我的客户端 JSON 输出是包含一个用户的用户列表的形式,并且我更改服务器注册方法这样来解决我的问题:

@RequestMapping(value = "/register",method = RequestMethod.POST)
@ResponseBody
public boolean registerNewUser(@RequestBody List<User> users){
    if(users!=null){
        try {
            SessionFactory sessionFactory=HibenateConnection.connectingHibernate();
            Session session=sessionFactory.openSession();
            session.beginTransaction();
            session.save(users.get(0));
            session.getTransaction().commit();
            session.close();
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }
    return false;
}

【讨论】:

    猜你喜欢
    • 2021-01-12
    • 2017-10-10
    • 2014-10-20
    • 2020-09-23
    • 1970-01-01
    • 2016-07-30
    • 2015-03-10
    • 2019-10-25
    • 2015-12-24
    相关资源
    最近更新 更多