UnrecognizedPropertyException:无法识别的字段在Source:org.apache.catalina.connector.CoyoteInputStream@14ec141中未标记为可忽略

Sye*_*Oan 4 java json

我正在制作休息网络服务我的代码是:

@Path("/add")
@POST
@Produces(MediaType.APPLICATION_JSON)
public Response addMembers(List<GroupMemberMap> groupMemberMaps){
    String message = "";            
    System.out.println("Inside addMembers of class "+this.toString());      
    try {
        DBConnection.insertMembers(groupMemberMaps);
        message = "Member(s) added";
        return Response.status(Status.CREATED)
                .entity(message)
                .type(MediaType.TEXT_PLAIN)
                .build();
    } catch(SQLException sqle){
        System.out.println("addMembers catch sqle");
        message = "A problem occured while adding members : "+sqle.getMessage();
        return Response.status(Status.INTERNAL_SERVER_ERROR)
                .entity(message)
                .type(MediaType.TEXT_PLAIN)
                .build();
    }
    catch (Exception e) {
        // TODO Auto-generated catch block
        System.out.println("Inside addMembers catch  "+e.getMessage());
        message = "A problem occured while adding members : "+e.getMessage();
        return Response.status(Status.INTERNAL_SERVER_ERROR)
                .entity(message)
                .type(MediaType.TEXT_PLAIN)
                .build();
    }       
}
Run Code Online (Sandbox Code Playgroud)

但是当我用这个Json调用它时:

[
{
    "userId":"3",
    "groupId":"4"
}
]
Run Code Online (Sandbox Code Playgroud)

我得到以下异常:

javax.servlet.ServletException:org.codehaus.jackson.map.exc.UnrecognizedPropertyException:无法识别的字段"userId"(类com.tazligen.model.GroupMemberMap),未在[Source:org.apache.catalina.connector中标记为可忽略. CoyoteInputStream @ 14ec141; line:2,column:15](通过引用链:com.tazligen.model.GroupMemberMap ["userId"])

我的GrouMemberMap模型类是:

package com.tazligen.model;

@XmlRootElement
public class GroupMemberMap {

private String userId;
private String groupId;

public String getUserid() {
    return userId;
}
public void setUserid(String userId) {
    this.userId = userId;
}
public String getGroupId() {
    return groupId;
}
public void setGroupId(String groupId) {
    this.groupId = groupId;
}       }
Run Code Online (Sandbox Code Playgroud)

我尝试过另一种方法:

@Path("/membertest")
@POST   
public String test(List<User> members){
    return "Test subresource members working";
}
Run Code Online (Sandbox Code Playgroud)

与json

[{
"userId":"3",
"userName":"John"}]
Run Code Online (Sandbox Code Playgroud)

但这没关系:/

需要有人帮忙.

use*_*685 7

看完GroupMemberMap课后我可以做以下观察:

  1. 构造函数丢失了.
  2. Getter-Setter的UserId错误.

此外,您可以添加可选项@JsonIgnoreProperties以忽略所有其他未知字段.

以下是更正后的代码段:

package com.tazligen.model;

@XmlRootElement
@JsonIgnoreProperties(ignoreUnknown = true)
public class GroupMemberMap {

    @JsonProperty("userId")
    private String userId;
    @JsonProperty("groupId")
    private String groupId;

    /* Add Constructor */
    public GroupMemberMap() {}

    /* Corrected Name */
    public String getUserId() {
        return userId;
    }

    /* Corrected Name */
    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getGroupId() {
        return groupId;
    }

    public void setGroupId(String groupId) {
        this.groupId = groupId;
    }    
}
Run Code Online (Sandbox Code Playgroud)

  • 你的第 2 次观察是否有技巧 getter setter 是错误的,我错过它的唯一原因是因为我有 eclipse 为我自动生成它所以我从没想过它会是错的,所以我从来没有注意过那部分。-_- 该死你 Eclipse 。非常感谢先生:) (2认同)