GlassFish JAX -Пользовательская сериализация JSON RS Jackson

У меня есть ресурс JAX -RS, и я хотел бы использовать собственный сериализатор JSON для атрибута java.util.Calendarс помощью @JsonSerialize(using=MySerializer.class).

import java.util.Calendar;
import org.codehaus.jackson.map.annotate.JsonSerialize;

public class FooBar {

    @JsonSerialize(using=MySerializer.class)
    private Calendar calendar;

    public FooBar() {
        calendar = Calendar.getInstance();
    }

    public Calendar getCalendar() {
        return calendar;
    }
}

MySerializer.java:

import java.io.IOException;
import java.util.Calendar;

import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.SerializerProvider;

public class MySerializer
    extends JsonSerializer<Calendar>
{

    @Override
    public void serialize(Calendar c, JsonGenerator jg, SerializerProvider sp)
        throws IOException, JsonProcessingException
    {            
        jg.writeString("fooBar Calendar time: " + c.getTime());
    }

}

Я создал простой проект в NetBeans 7.1, и он хорошо работает.

Когда я использую его в другом проекте с другим развертыванием (EAR с несколькими файлами WAR и EJB JAR ), я получаю

javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A message body writer for Java class
com.example.FooBar and MIME media type application/json was not found

Но если я помещаю в файл web.xml параметр инициализации -

<init-param>
   <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
   <param-value>true</param-value>
</init-param>

сериализация json работает, но аннотация @JsonSerializeне работает.

С другой стороны, проекту Netbeans не нужно POJOMappingFeature.

В чем разница между этими двумя приложениями?

Какая разница, если одному приложению нужно POJOMappingFeature, а другому нет?

5
задан kavai77 7 May 2012 в 10:06
поделиться