Ok, consegui solucionar o problema.
Depois de dar uma lida na documentação do Jackson, descobri que ele e o sql.Date não se dão muito bem, e era justamente esse tipo que eu estava usando pois, antes desse webservice existir, todas as conexões eram feitas via JDBC na própria aplicação cliente e os Models utilizavam o tipo sql.Date já que é esse o tipo que os Statements aceitam, e acontece que, mesmo depois de migrar para o Webservice, a aplicação cliente continuou usando o sql.Date. Após mudar todas as datas para util.Date eis que tudo funciona perfeitamente. Porém, assim que alterei as datas, inclusive no webservice, elas começaram a vir representadas em TimeStamp pois é o Default da annotation @Produces se não me engano, e na hora de criar o objeto a partir do JSON no lado do cliente acontecia um erro de parsing, então tive que atribuir um desserializador que converte o Timestamp para Date ao meu GSon Builder.
Se você está tendo esse mesmo problema, fica a dica: Não utilize sql.Date com o Jackson para não ter dores de cabeça. E se você precisar do codigo do desserializador, aqui segue um metodo que já gera um Gson prontinho para usar e que também serve para o tipo sql.Timestamp.
public static Gson getTimestampGson(){
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Timestamp.class, new JsonDeserializer<Timestamp>() {
@Override
public Timestamp deserialize(JsonElement json, java.lang.reflect.Type arg1, JsonDeserializationContext arg2) throws JsonParseException {
return new Timestamp(json.getAsJsonPrimitive().getAsLong());
}
});
builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
@Override
public Date deserialize(JsonElement json, java.lang.reflect.Type arg1, JsonDeserializationContext arg2) throws JsonParseException {
return new Date(json.getAsJsonPrimitive().getAsLong());
}
});
builder.setDateFormat("yyyy-MM-dd");
return builder.create();
}