繁体   English   中英

如何从Java Rest API返回json对象

[英]how to return json objects from java rest api

我正在尝试从jax-rs返回JSON对象,但是每当尝试访问时都会收到内部服务器错误。

这是我的方法,我正在使用javax.ws.rs.GET

@GET
@Produces("application/json")
public Testy getJson() {
   return new Testy("hello");
}

这是课程:

public class Testy {

    private final String value;

    public Testy(String value){

        this.value = value;
    }

  public String getValue(){

      return value;
   }

}

我的Pom.xml具有此依赖关系,我尝试了各种依赖关系,但没有任何效果。 球衣有各种Maven资源,其中有jersey-client jersey-core。

<dependency>
 <groupId>com.fasterxml.jackson.jaxrs</groupId>
 <artifactId>jackson-jaxrs-json-provider</artifactId>
 <version>2.3.3</version>
</dependency>

我正在使用Glassfish 4。

有关使用Jersey的问题:

我见过一些地方 ,他们提到您需要初始化POJO支持,这似乎适用于球衣1. *,但我不确定。 如果我使用的是2. *,我不需要这个吗?

我是否必须修改web.xml以指向jersey servlet?

如何使用POJO类产生和使用JSON对象!

编辑

这是我自动生成的配置类。

在此处输入图片说明

我必须将JacksonFeature资源添加到我的ApplicationConfig类中。

    @javax.ws.rs.ApplicationPath("webresources")
public class ApplicationConfig extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> resources = new java.util.HashSet<>();              
       addRestResourceClasses(resources);
       resources.add(org.glassfish.jersey.jackson.JacksonFeature.class);
        return resources;
    }

    /**
     * Do not modify addRestResourceClasses() method.
     * It is automatically populated with
     * all resources defined in the project.
     * If required, comment out calling this method in getClasses().
     */
    private void addRestResourceClasses(Set<Class<?>> resources) {
        resources.add(com.wfscorp.restapitwo.GenericResource.class);
    }

}

然后一切正常!

注意

当我使用com.fasterxml.jackson.jaxrs依赖项时,我无法部署我的应用程序。 我开始收到WELD-001408 Unsatisfied dependencies for type错误的WELD-001408 Unsatisfied dependencies for type所以我不得不排除jersey media的多个部分。

这些是我pom.xml中的依赖项

 <dependencies>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>2.13</version>
        <type>jar</type>
    </dependency>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>7.0</version>
        <scope>provided</scope>
    </dependency> 

    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
        <version>2.4.0</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-multipart</artifactId>
        <version>2.7</version>
        <scope>provided</scope>
    </dependency>

</dependencies>

可能是您需要使用getter公开Testy对象的value属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM