Instanz von java.util.ArrayList kann nicht aus VALUE_STRING deserialisiert werden

Ich habe einen REST-Service mit Jersey erstellt und in der AppEngine bereitgestellt. Der REST-Service implementiert das Verb PUT, das einen application / json-Medientyp verwendet. Die Datenbindung wird von Jackson durchgeführt.

Das Verb verbraucht eine Beziehung zwischen Unternehmen und Abteilungen, die in JSON als dargestellt wird

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

Auf der Clientseite verwende ich gson, um die JSON-Darstellung in ein Java-Objekt zu konvertieren. Dann übergebe ich das Objekt an meinen REST-Service und es funktioniert einwandfrei.

Problem:

Wenn meine JSON-Darstellung nur ein Element in der Sammlung hat

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

Der Dienst kann das Objekt nicht deserialisieren.

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

Wie von anderen Benutzern gemeldet, besteht die Lösung darin, das Flag ACCEPT_SINGLE_VALUE_AS_ARRAY hinzuzufügen (z. B.Jersey: Instanz von ArrayList kann nicht aus String deserialisiert werden). Trotzdem steuere ich keinen ObjectMapper, da er auf der Serviceseite transparent von Jackson erstellt wird.

Frage:

Gibt es eine Möglichkeit, den ObjectMapper auf der Serviceseite so zu konfigurieren, dass ACCEPT_SINGLE_VALUE_AS_ARRAY aktiviert wird? Anmerkungen? web.xml?

Code-Details

Java-Objekt:

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

    public Enterprise() {}

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

Die REST-Serviceseite:

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

Client Seite:

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

Antworten auf die Frage(4)

Ihre Antwort auf die Frage