[英]org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field “id” (Class Criteria), not marked as ignorable
[英]UnrecognizedPropertyException: Unrecognized field not marked as ignorable at Source: org.apache.catalina.connector.CoyoteInputStream@14ec141
我正在制作 rest web-services 我的代碼是:
@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: org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "userId" (Class com.tazligen.model.GroupMemberMap), not marked as ignorable at [Source: org.apache.catalina.connector.CoyoteInputStream@ 14ec141; 行:2,列:15](通過引用鏈:com.tazligen.model.GroupMemberMap["userId"])
我的 GrouMemberMap model class 是:
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"}]
但這沒問題:/
需要有人幫助。
查看GroupMemberMap
類后,我可以進行以下觀察:
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;
}
}
我正在使用 lombok 生成帶有 @Getter 和 @Setter 注釋的 getter 和 setter。 現在為我解決了類似問題的是將字段的數據類型從主要的 java 類型 boolean 轉換為 Boolean。 Lombok 僅在我使用 Boolean fieldName 時才為它生成一個 getter。
只需修改 userId 和 groupId public
。 默認情況下,Jackson 處理公共成員變量。
我認為 JsonIgnoreProperties 不是解決方案,因為它用於忽略它無法識別的任何內容。
public String userId;
public String groupId;
上面的解決方案對我有用,我在 json object 中有字符串數組。我使用 JsonIgnore 屬性並為 json object 中的對象替換了方括號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.