jackson 无法识别的属性异常:无法识别的字段在源中未标记为可忽略:14ec141年14月14日发布的Coyote输入流

au9on6nz  于 2022-11-09  发布在  其他
关注(0)|答案(4)|浏览(117)

我正在制作其他Web服务,我的代码是:

@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();
    }       
}

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

[
{
    "userId":"3",
    "groupId":"4"
}
]

我遇到以下异常:
javax.servlet.ServletException:无法识别的属性异常:无法识别的字段“userId”(类com.tazligen.model.GroupMemberMap),未在[源:这是一个很好的解决方案。行:2,列:15](通过参考链:[“用户ID”])
我的GroupMemberMap模型类是:

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;
}       }

我曾尝试过另一种方法,就像这样:

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

使用json

[{
"userId":"3",
"userName":"John"}]

但这是正确的:/
需要帮助。

7jmck4yq

7jmck4yq1#

在查看GroupMemberMap类之后,我可以得出以下观察结果:
1.缺少构造函数。

  1. UserId的Getter-Setter不正确。
    此外,您还可以添加可选的@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;
    }    
}
pexxcrt2

pexxcrt22#

我使用lombok生成带有@Getter和@Setter注解的getter和setter。现在,我解决了一个类似的问题,将字段的数据类型从主要的java类型boolean转换为Boolean。只有当我使用Boolean fieldName时,Lombok才会为它生成getter。

qpgpyjmq

qpgpyjmq3#

**只需修改userId和groupId public。**默认情况下,Jackson处理公共成员变量。

我认为JsonIgnoreProperties不是解决方案,因为它被用来忽略它无法识别的任何内容。

public String userId;
public String groupId;
4dc9hkyq

4dc9hkyq4#

上面的解决方案对我很有效,我在json对象中有字符串数组。我使用了jsonIgnore属性,并替换了json对象中对象的方括号。

相关问题