我要面对
MessageBodyProviderNotFoundException
同时将JAX-RS服务作为JSON使用。当服务的返回类型为String时,它是有效的,但如果我将其类型更改为any,它就不起作用
Object
或
Response
.
我在谷歌上搜索并尝试了stack overflow或任何其他博客上发布的所有可能的解决方案,但仍然无法解决它。
例外情况:
Aug 05, 2019 5:29:50 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [com.muneeb] in context with path [/AddressBookAPI] threw exception [org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json, type=class com.muneeb.entities.User, genericType=class com.muneeb.entities.User.] with root cause
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json, type=class com.muneeb.entities.User, genericType=class com.muneeb.entities.User.
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:191)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:139)
at org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:103)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:139)
at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:88)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:139)
at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1005)
at org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.java:515)
at org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.java:362)
at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:352)
at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:240)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
这是人工制品的代码。
@Path("/users")
public class UserResource {
@GET
@Path("/getUsers")
@Produces(MediaType.APPLICATION_JSON)
public User getAll(){
User user1 = new User("Jersey", "glassfish", 2, null, null, 1234);
return user1;
}
}
使用者JAVA
public class User {
private String fName;
private String lName;
private Integer age;
private List<Address> addresses;
private List<Phone> phones;
private long pin;
public User() {}
..... getters and setters
注册Jackson模块
@ApplicationPath("/api")
public class AddressBookAPI extends Application{
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(JacksonFeature.class);
return classes;
}
}
还有谁能告诉我
"/api"
在上面的ApplicationPath注释中?除了这个,我还能提供什么吗
“/api”
这里是网络。xml
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>com.muneeb</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.muneeb.rest</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>com.muneeb</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
波姆。xml
[INFO] com.muneeb.rest:AddressBookAPI:war:1.0-SNAPSHOT
[INFO] +- junit:junit:jar:3.8.1:test
[INFO] +- javax.ws.rs:javax.ws.rs-api:jar:2.0.1:compile
[INFO] +- org.glassfish.jersey.media:jersey-media-json-jackson:jar:2.2:compile
[INFO] | +- org.glassfish.jersey.core:jersey-common:jar:2.2:compile
[INFO] | | +- javax.annotation:javax.annotation-api:jar:1.2:compile
[INFO] | | \- org.glassfish.hk2:osgi-resource-locator:jar:1.0.1:compile
[INFO] | +- org.codehaus.jackson:jackson-core-asl:jar:1.9.11:compile
[INFO] | +- org.codehaus.jackson:jackson-mapper-asl:jar:1.9.11:compile
[INFO] | +- org.codehaus.jackson:jackson-jaxrs:jar:1.9.11:compile
[INFO] | \- org.codehaus.jackson:jackson-xc:jar:1.9.11:compile
[INFO] +- org.glassfish.jersey.core:jersey-server:jar:2.2:compile
[INFO] | +- org.glassfish.jersey.core:jersey-client:jar:2.2:compile
[INFO] | +- com.google.guava:guava:jar:14.0.1:compile
[INFO] | +- org.glassfish.hk2:hk2-api:jar:2.2.0-b14:compile
[INFO] | | \- org.glassfish.hk2:hk2-utils:jar:2.2.0-b14:compile
[INFO] | +- org.glassfish.hk2.external:javax.inject:jar:2.2.0-b14:compile
[INFO] | +- org.glassfish.hk2:hk2-locator:jar:2.2.0-b14:compile
[INFO] | | +- org.glassfish.hk2.external:asm-all-repackaged:jar:2.2.0-b14:compile
[INFO] | | \- org.glassfish.hk2.external:cglib:jar:2.2.0-b14:compile
[INFO] | \- javax.validation:validation-api:jar:1.1.0.Final:compile
[INFO] +- org.glassfish.jersey.containers:jersey-container-servlet:jar:2.2:compile
[INFO] | \- org.glassfish.jersey.containers:jersey-container-servlet-core:jar:2.2:compile
[INFO] \- javax.servlet:javax.servlet-api:jar:3.1.0:provided