Могу ли я получить обычное pojo как объект json в RESTful-jersey - PullRequest
0 голосов
/ 28 октября 2010

Я реализую веб-сервис Джерси restful для получения типа mime приложения / json из классов Java-бинов. Ниже приведен код класса ресурса

    @GET
    @Produces({"application/json"})
    public synchronized Flights getFlightList() {
        return myFlights;
    }

Здесь, если возвращаемый объект (Flight) конвертируется в объект json только при кодировании Flight с помощью jaxb. Для обычных классов POJO он ничего не возвращает, вместо этого приходит Http error «500».

Подскажите, пожалуйста, можно ли отправить обычный объект Java-бина в формате json? Если да, то, пожалуйста, дайте мне знать, как его получить?

Ответы [ 3 ]

2 голосов
/ 01 сентября 2011

Если вы используете сервлеты, присвойте POJOMappingFeature значение true в файле web.xml, и преобразование POJO будет выполнено автоматически.

<servlet>
    <servlet-name>Jersey</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>my.package.name</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
</servlet>
1 голос
/ 21 июня 2011

Зарегистрированный по умолчанию поставщик сериализации JSON работает с теми же аннотациями, что и JAXB (который сам обрабатывает сериализацию XML).Обычно это является преимуществом, так как это означает, что вам нужно только добавить один набор аннотаций и, конечно, не нужно писать какой-либо код прямой сериализации самостоятельно.

Но это равно можно выполнять больше работы по сериализации самостоятельно.

@Produces("application/json")
@Provider
public class FlightsWriter implements MessageBodyWriter<Flights> {
    public boolean isWriteable(Class<?> type, Type genericType,
                Annotation[] annotations, MediaType mediaType) {
        return type instanceof Flights; // Simplest possible
    }
    public long getSize(Flights flights,
                Class<?> type, Type genericType,
                Annotation[] annotations, MediaType mediaType) {
        return -1; // Or real size if you can work it out!
    }
    public void writeTo(Flights flights,
                Class<?> type, Type genericType,
                Annotation[] annotations, MediaType mediaType,
                MultivaluedMap<String,Object> httpHeaders,
                OutputStream entityStream) throws IOException,
                WebApplicationException {
        // Put your code to write the JSON here...
    }
}

Имейте в виду, что это лот работы, поэтому большинство людей используют встроенный движок и добавляют аннотации JAXB.

1 голос
/ 09 апреля 2011

Вы можете проверить следующий пример для руководства: http://download.java.net/maven/2/com/sun/jersey/samples/jacksonjsonprovider/1.6/jacksonjsonprovider-1.6-project.zip

Также прочитайте документы, чтобы получить больше знаний: http://jersey.java.net/nonav/documentation/latest/json.html#d4e894

...