入力をPathParamとして受け入れ、JSON応答を生成するRESTサービスを作成しています。コードは正常に機能しており、応答を作成できます。応答を返した後、RESTは「(ResponseClass)およびMediaType application/jsonのライターまたはDATASOURCEPROVIDERを見つけることができませんでした」などのエラーをスローします。ありがとう。
3114 次
3 に答える
3
これが、私がJackson2.1.3をJSONプロバイダーとしてWinkと連携させる方法です。
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>
于 2013-01-23T22:55:53.583 に答える
0
ジャージーを使っていると思います。
まず、依存関係を確認します: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>
于 2012-12-27T22:33:51.413 に答える
-1
私自身、WinkApplicationが正しくロードされていないことに気づきました。web.xmlのrestsdkservice構成が正しくなかったため、JacksonJaxbJsonProviderがWinkにロードされませんでした。2日後にようやく手に入れました。
みんな、ありがとう!!
于 2012-12-31T09:15:00.527 に答える