簡體   English   中英

在Java REST中解析JSON參數時出錯

[英]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() {}
}

您需要一個JSON提供程序

在撰寫本文時,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提供的MessageBodyWriterJacksonJsonProvider


有關更多詳細信息,請參閱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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM