REST не удалось найти средство записи или источник данных для типа application/json

Я создаю службу REST, которая принимает входные данные как PathParam и создает ответ JSON. Код работает нормально, и я могу построить ответ. После возврата ответа REST выдает ошибку типа «НЕ МОЖЕТ НАЙТИ ПИСАТЕЛЯ ИЛИ ИСТОЧНИКА ДАННЫХ ДЛЯ (ResponseClass) и приложения MediaType/json». Спасибо.


person Raja Asthana    schedule 27.12.2012    source источник
comment
REST выдает ошибку - это невозможно. С той информацией, которую вы даете, вам никто не сможет помочь.   -  person DanMan    schedule 27.12.2012


Ответы (3)


Вот как я заставил jackson 2.1.3 работать с Wink в качестве провайдера JSON.

import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.core.Application;

//see  http://www.ibm.com/developerworks/web/library/wa-aj-jackson/
import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
import com.fasterxml.jackson.databind.AnnotationIntrospector;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
import com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector;
import com.fasterxml.jackson.databind.type.TypeFactory;

/**
 * @see https://cwiki.apache.org/WINK/jax-rs-getting-started.html
 */
public class JaxrsApp extends Application {

@Override
public Set<Class<?>> getClasses() {
    Set<Class<?>> classes = new HashSet<Class<?>>();
    classes.add(YourJaxRSAnnotated.class);
    //...
    return classes;

}
 @Override
  public Set<Object> getSingletons() {
    Set<Object> s = new HashSet<Object>();

    // See http://wiki.fasterxml.com/JacksonJAXBAnnotations for more information
    ObjectMapper mapper = new ObjectMapper();
    AnnotationIntrospector primary = new JaxbAnnotationIntrospector( TypeFactory.defaultInstance() );
    AnnotationIntrospector secondary = new JacksonAnnotationIntrospector();
    AnnotationIntrospector pair = AnnotationIntrospector.pair(primary, secondary);
    mapper.getDeserializationConfig().with(pair);
    mapper.getSerializationConfig().with(pair);

    // Set up the provider
    JacksonJaxbJsonProvider jaxbProvider = new JacksonJaxbJsonProvider();
    jaxbProvider.setMapper(mapper);

    s.add(jaxbProvider);
    return s;
  }
}

затем в web.xml

<servlet>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <servlet-class>org.apache.wink.server.internal.servlet.RestServlet</servlet-class>
    <!--  this param tells the RestServlet which custom Application sub-class
    will return a list of our classes that have JAX-RS annotations -->
    <init-param>
              <param-name>javax.ws.rs.Application</param-name>
              <param-value>com.example.JaxrsApp</param-value>
            </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
person chugadie    schedule 23.01.2013
comment
Уже 2 дня пытаюсь решить эту проблему. Все потому, что все используют Maven (а там, где я работаю, его не используют и внедрять не хотят). Благодаря использованию я наконец смог решить эту проблему. Я знаю, что в более обновленной версии jackson нет метода setMapper, но сейчас я просто рад, что наконец-то смогу конвертировать json в pojo и обратно. Благодарю вас! - person LiefLayer; 26.03.2020

Я полагаю, вы используете Джерси.

Прежде всего проверьте зависимости: http://jersey.java.net/nonav/documentation/latest/chapter_deps.html#d4e1716

Вот мой pom.xml:

    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.15</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>1.15</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-servlet</artifactId>
        <version>1.15</version>
    </dependency>
person kalamar    schedule 27.12.2012


Я сам обнаружил, что приложение WinkApplication загружается неправильно. Конфигурация restsdkservice в web.xml была неверной, и из-за этого JacksonJaxbJsonProvider не загружался в Wink. Наконец получил через 2 дня.
Спасибо всем!!

person Raja Asthana    schedule 31.12.2012
comment
Любая помощь для людей с такой же проблемой? - person chugadie; 23.01.2013
comment
В конце концов я нашел пример кода для применения интроспекторов аннотаций Джексона к моему приложению Wink. Я обновил код до Jackson 2.x и опубликовал его как отдельный ответ из-за нехватки места. - person chugadie; 24.01.2013