UnrecognizedPropertyException: нераспознанное поле не помечено как игнорируемое в источнике: org.apache.catalina.connector.CoyoteInputStream@14ec141

Я делаю остальные веб-сервисы, мой код:

@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: нераспознанное поле «userId» (класс com.tazligen.model.GroupMemberMap), не помеченное как игнорируемое в [Источник: org.apache.catalina.connector. КойотИнпутСтрим@14ec141; строка: 2, столбец: 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;
}       }

Я пробовал другой метод, подобный этому:

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

с json

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

но это работает нормально :/

Нужна помощь.


person Syed Muhammad Oan    schedule 24.02.2016    source источник


Ответы (2)


Посмотрев на 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;
    }    
}
person user2004685    schedule 24.02.2016
comment
я немного отредактировал свой вопрос, в котором вы можете видеть, что я пробовал с другим классом модели, но похожим шаблоном json, но он работает - person Syed Muhammad Oan; 24.02.2016
comment
Обновил решение. Пожалуйста, попробуйте сейчас. - person user2004685; 24.02.2016
comment
Ваше наблюдение № 2 показало, что установщик трюков был неправильным, и единственная причина, по которой я когда-либо пропустил его, заключалась в том, что у меня было затмение, автоматически сгенерировавшее его для меня, поэтому я никогда не думал, что это будет неправильно, поэтому я никогда не обращал внимания на эту часть. -_- Черт. ты затмение. Большое спасибо, сэр :) - person Syed Muhammad Oan; 24.02.2016
comment
@Мухаммад Добро пожаловать! :) - person user2004685; 24.02.2016

Просто измените идентификатор пользователя и идентификатор группы public. По умолчанию Джексон работает с общедоступными переменными-членами.

Я думаю, что JsonIgnoreProperties не является решением, поскольку он используется для игнорирования всего, что он не распознает.

public String userId;
public String groupId;
person Uddhav Gautam    schedule 04.08.2020