Невозможно десериализовать экземпляр java.util.ArrayList из VALUE_STRING.

У меня есть служба REST, созданная на Джерси и развернутая в AppEngine. Служба REST реализует глагол PUT, который использует тип носителя application / json. Привязка данных выполняется Джексоном.

Глагол использует отношение предприятия-департамента, представленное в JSON как

{"name":"myEnterprise", "departments":["HR","IT","SC"]}

На стороне клиента я использую gson для преобразования представления JSON в объект java. Затем я передаю объект в службу REST, и он работает нормально.

Проблема:

Когда мое представление JSON имеет только один элемент в коллекции

{"name":"myEnterprise", "departments":["HR"]}

служба не может десериализовать объект.

ATTENTION: /enterprise/enterprise: org.codehaus.jackson.map.JsonMappingException: 
Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token at 
[Source: org.mortbay.jetty.HttpParser$Input@5a9c5842; line: 1, column: 2

Как сообщают другие пользователи, решение состоит в том, чтобы добавить флаг ACCEPT_SINGLE_VALUE_AS_ARRAY (например,Джерси: не может десериализовать экземпляр ArrayList из строки). Тем не менее, я не контролирую ObjectMapper, потому что на стороне сервиса он прозрачно сделан Джексоном.

Вопрос:

Есть ли способ настроить ObjectMapper на стороне службы для включения ACCEPT_SINGLE_VALUE_AS_ARRAY? аннотации? web.xml?

Детали кода

Java-объект:

@XmlRootElement
public class Enterprise {
    private String name;
    private List departments;

    public Enterprise() {}

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List getDepartments() {
        return departments;
    }
    public void setDepartments(List departments) {
        this.departments = departments;
    }
}

Сторона обслуживания REST:

    @PUT
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    @Path("/enterprise") 
    public Response putEnterprise(Enterprise enterprise,
            @Context HttpServletRequest req){
         ...
    }

Сторона клиента:

...
String jsonString = "{\"name\":\"myEnterprise\", \"departments\":[\"HR\"]}";
Enterprise enterprise = gson.fromJson(jsonString, Enterprise.class);
System.out.println(gson.toJson(enterprise));
response = webResource              
           .type(MediaType.APPLICATION_JSON)
           .put(ClientResponse.class,enterprise);
if (response.getStatus() >= 400) {
        throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
}
...

Ответы на вопрос(4)

Ваш ответ на вопрос