- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
大家好。我是 Jersey 和 Jackson 的新手,发现很难在客户端反序列化来 self 的 REST 服务的 JSOn 响应。我很确定我仍然没有很好地掌握对象映射器和 JSON 提供程序 API。提前感谢任何帮助或指导。这是我的源代码。
@XmlRootElement(name = "user")
public class User implements Serializable{
private String firstName;
private String lastName;
private String email;
private String userID;
public User() {
}
public User(String firstName, String lastName, String email, String userID) {
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
this.userID = userID;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
}
package com.example.service.client;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.glassfish.jersey.jackson.JacksonFeature;
import com.example.service.bean.User;
import com.example.service.client.mapper.MyMessageBodyReader;
import com.example.service.client.mapper.MyObjectMapperProvider;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
public class GetJSONResponse {
public static void main(String[] args) {
// TODO Auto-generated method stub
JacksonJaxbJsonProvider provider1 = new JacksonJaxbJsonProvider();
Client c = ClientBuilder.newClient()register(provider1);//.register(mapper);
WebTarget target = c.target("http://localhost:8080/RestfulWebserviceExample").path("/jaxrs/user/Nishit");
Response resp = target.request(MediaType.APPLICATION_JSON).get();
System.out.println(resp.getStatus());
String user1 = resp.readEntity(String.class);
System.out.println(user1);
User user = target.request(MediaType.APPLICATION_JSON).get(User.class);
System.out.println("User : " + user.getUserID());
}
}
`前 2 个 sysout 生成的输出为
200
{"user":{"firstName":"Nishit","lastName":"Ladha","email":"ladha@us.ibm.com","userID":"nishiz"}}
但是当我尝试直接从响应中获取用户对象时,我得到一个错误
Exception in thread "main" javax.ws.rs.client.ResponseProcessingException: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "user" (class com.example.service.bean.User), not marked as ignorable (4 known properties: "lastName", "firstName", "email", "userID"])
at [Source: org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream@10163d6; line: 1, column: 10] (through reference chain: com.example.service.bean.User["user"])
at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:806)
at org.glassfish.jersey.client.JerseyInvocation.access$700(JerseyInvocation.java:92)
at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:700)
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:228)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:444)
at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:696)
at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:420)
at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:316)
at com.example.service.client.GetJSONResponse.main(GetJSONResponse.java:40)
Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "user" (class com.example.service.bean.User), not marked as ignorable (4 known properties: "lastName", "firstName", "email", "userID"])
如果你们中的任何人能指导我如何解决这个问题,那将是非常友好的。
我没有使用 Maven,因为我最初想尝试不使用 Maven
我不确定为什么我的休息服务正在包装响应。这是代码:
@GET
@Path("/{username}")
@Produces(MediaType.APPLICATION_JSON)
public User helloWorld(@PathParam("username") String name){
User user = new User();
user.setFirstName("Nishit");
user.setLastName("Ladha");
user.setUserID("nishiz");
user.setEmail("ladha@us.ibm.com");
return user;
}
<servlet>
<description>JAX-RS Tools Generated - Do not modify</description>
<servlet-name>JAX-RS Servlet</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.example.service,
com.fasterxml.jackson.jaxrs.json
</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
最佳答案
伙计,看,你正试图绑定(bind)不存在的字段 User。如果你想正确解析这个json
{"user":{"firstName":"Nishit","lastName":"Ladha","email":"ladha@us.ibm.com","userID":"nishiz"}}
你需要有类似这个类
public class UserWrapper implements Serializable{
private User user;
// Constructors
// Getters, and setters
// HashCode and equals
}
然后此客户端代码将起作用:
public class GetJSONResponse {
public static void main(String[] args) {
// TODO Auto-generated method stub
JacksonJaxbJsonProvider provider1 = new JacksonJaxbJsonProvider();
Client c = ClientBuilder.newClient()register(provider1);//.register(mapper);
WebTarget target = c.target("http://localhost:8080/RestfulWebserviceExample").path("/jaxrs/user/Nishit");
Response resp = target.request(MediaType.APPLICATION_JSON).get();
System.out.println(resp.getStatus());
String user1 = resp.readEntity(String.class);
System.out.println(user1);
UserWrapper userWrapper = target.request(MediaType.APPLICATION_JSON).get(UserWrapper.class);
}
}
如果您有任何问题,尽管提问。希望您的代码能正常工作。
关于json - JAXRS 客户端 - Pojo 的反序列化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32725642/
我在谷歌上搜索了很多,但仍然对上述每一项的确切含义感到困惑。 这是我的理解: jaxrs-api :仅包含 api。没有实现。但它与 JSR311 有什么不同 jsr311-api:JSR311它是一
我有一个这样配置的 jaxrs 客户端: 但是当我发送请求时,出现以下异常: Caused by:
我正在寻找一种方法来包装我的服务的任何响应。 我有一个简单的服务,有很多不同的方法,就像这样 @Path(value = "/listSomething/{apiKey:.+}") public Li
我在使用我的应用程序运行 Errai-jaxrs 时遇到了很大的问题,我从 GWT 开发模式中收到此错误: org.jboss.errai.enterprise.client.jaxrs.api.Re
我有一个要求,我需要通过在请求正文中添加该 xml 来将 xml 从 Firefox 浏览器的 Restclient 插件发送到资源。为此,我编写了一个消息正文阅读器实现类,并将该 xml 转换为 j
我制作了以下 pom.xml 条目: io.swagger swagger-jaxrs 1.5.0 并创建了一个 servlet: publ
据我所知: this quarkus documentation ,quarkus 使用工作线程来执行 jaxrs 端点。 this vert.x documentation ,工作线程设计用于调用阻
我正在尝试基于注释拦截对我的 jaxrs api 的请求,我的过滤器很简单: @Provider public class Filter implements ContainerRequestFilt
我正在努力实现一个通用的抽象 jaxrs 服务,而无需重复多个 jaxrs 注释。 例如,这是我的服务和实体结构: AbstractEntity.java import javax.xml.bind.
我的 REST 服务出现问题。问题是我的实体之间存在关系,当该实体要写为 JSON 时,JBoss 无法做到这一点。代码如下: 子类: @XmlRootElement class Child
我发现自己在使用 Jackson JAX-RS 提供程序时遇到了一个奇怪的问题。假设我有两个简单的类; class A { public class A() {} public B b
大家好。我是 Jersey 和 Jackson 的新手,发现很难在客户端反序列化来 self 的 REST 服务的 JSOn 响应。我很确定我仍然没有很好地掌握对象映射器和 JSON 提供程序 API
我有一个 Restful API,用于通过 POST 将一些文件从远程节点上传到服务器 如果我关闭服务器,上传会在远程排队,这样当服务器重新联机时,可能会有大量请求进入,这可能会导致服务器关闭 应用程
我正在尝试使用 http://svn.apache.org/repos/asf/cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_soap_rest/
我有类 Admin 扩展了 User {}。 Admin 和 User 都扩展了 @XmlRootElement @XmlRootElement public class User { ....
使用 JAXRS-2.0(特别是 Jersey 2.2),我试图将请求拦截器应用于特定的资源提供程序类(位于第 3 方库中),但我显然做错了。我收到以下错误 - 我对其原因有点困惑。最终效果是,针对每
我有一个方法,其中我需要根据某些计算覆盖查询参数的值: @GET @Path("/channel") @Produces(MediaType.APPLICATION_JSON) @OptimizedD
我正在使用 java (Netbeans IDE) 创建 Restful 服务。我从两个相关表创建了两个实体类。我还从模式中创建了 Restful 服务。我使用了容器项目设计模式。我需要从单个容器调用
我正在尝试运行 JAX-RS 服务。尝试启动 Tomcat 服务器时,出现错误“发现以元素 'jaxrs:servicebeans' 开头的无效内容” 详细错误是 - *发现以元素“jaxrs:ser
我按照此处找到的指南进行操作: https://github.com/wordnik/swagger-core/wiki/Java-JAXRS-Quickstart 这是我的 POM: com
我是一名优秀的程序员,十分优秀!