[英]Error parsing JSON param in java REST
我最近將REST API升級為使用jersey 2.x,現在我無法以以前的方式檢索JSON主體參數,因此不再調用這些方法。 我的猜測是我缺少將JSON解析為java對象的依賴項,但是我不太確定需要添加什么,感謝任何幫助。
pom.xml
<dependencies>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.19</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.19</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.19</version>
</dependency>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-multipart</artifactId>
<version>2.22</version>
</dependency>
</dependencies>
REST方式
@POST
@Path("/users/{userId}/friends")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response followUser(@PathParam("userId") Integer myUserId, FollowUserBean user) {}
FollowUserBean.java
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class FollowUserBean {
public Integer friendId;
public FollowUserBean() {}
}
在撰寫本文時,Jersey 2.x與以下模塊集成以提供JSON支持:
請參閱以下將Jackson用作Jersey 2.x的JSON提供程序所需的步驟:
添加Jackson模塊依賴項
要將Jackson 2.x用作JSON提供程序,您需要將jersey-media-json-jackson
模塊添加到pom.xml
文件中:
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.25.1</version>
</dependency>
要使用Jackson 1.x,它將類似於:
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson1</artifactId>
<version>2.25.1</version>
</dependency>
注冊Jackson模塊
除了增加依賴上面提到的,你需要注冊JacksonFeature
(或Jackson1Feature
在傑克遜的1.x) Application
/ ResourceConfig
子類:
@ApplicationPath("/api")
public class MyApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(JacksonFeature.class);
return classes;
}
}
@ApplicationPath("/api")
public class MyApplication extends ResourceConfig {
public MyApplication() {
register(JacksonFeature.class);
}
}
如果沒有Application
/ ResourceConfig
子類,則可以在web.xml
部署描述符中注冊JacksonFeature
。 可以在jersey.config.server.provider.classnames
初始化參數的逗號分隔值中提供特定的資源,提供者和功能完全合格的類名稱。
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>org.glassfish.jersey.jackson.JacksonFeature</param-value>
</init-param>
Jackson提供的MessageBodyWriter
是JacksonJsonProvider
。
有關更多詳細信息,請參閱Jersey 文檔中有關對常見媒體類型表示形式的支持。
您可能會缺少Jersey JSON Jackson(2.x)實體提供程序支持模塊:
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.19</version>
<scope>compile</scope>
</dependency>
建議在所有庫中使用相同的Jersey版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.