java - restful框架 - jersey-client maven




泽西Json和Pojo (2)

依赖

删除jersey-media-json (这个模块在Jersey 2.x中不再存在)和jersey-json (仅用于Jersey 1.x),并添加一个模块jersey-media-moxy (JAXB)或者jersey-media-json-jackson (POJO)。 有关这些模块的更多信息,请参阅Jersey用户指南中的JSON一章

web.xml中

除去Jersey 1.x特有的com.sun.jersey.config.property.packagescom.sun.jersey.api.json.POJOMappingFeature ,并且在Jersey 2.x中没有用处。 第一个已经被替换为jersey.config.server.provider.packages ,第二个已经被删除(使用POJO JSON < - >对象映射使用Jackson模块jersey-media-json-jackson )。

注册功能

如果您使用的是jersey-media-json-jackson模块,则需要在JAX-RS应用程序的扩展中或在web.xml使用(从ServerProperties使用属性)注册JacksonFeature - 请参阅Jackson章节 。 MOXY( jersey-media-moxy )是在模块处于class-path时自动注册的。

我花了太多的时间(超过10个,我会说)试图找出如何获得基本的json调用(从angularjs)来打开和处理我的泽西岛2.4。 我试过每一个可能的结果在谷歌,我仍然得到一个

415(不支持的媒体类型)

客户端和a

org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException:MessageBodyReader not found for media type = application / json,type = class jersey.webreadability.controllers.jsonmodels.TextInput,genericType = class jersey.webreadability.controllers.jsonmodels.TextInput。

在服务器端。

我会在这里写下所有可能的文件,我试图解决这个问题,希望它能帮助别人帮助我。 目前我真的不在意它将如何工作,只要它能奏效,我都明白无论我是否应该与Jackson或Gson合作。

依赖关系(来自POM文件):

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json</artifactId>
    <version>2.0-m05-1</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-json</artifactId>
    <version>1.17.1</version>
</dependency>

来自Web.xml:

<servlet>
    <servlet-name>webReadability</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>jersey.webreadability.controllers</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.algo.server.webservice;org.codehaus.jackson.jaxrs</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
</servlet>

对象类:

@XmlRootElement(name = "TextInput")
public class TextInput implements Serializable {

@XmlElement public String url;
@XmlElement public String text;
@XmlElement public String file;

public TextInput() {
}

public TextInput(String url, String text, String file) {
    this.url = url;
    this.text = text;
    this.file = file;
}

@Override
public String toString() {
    return "TextInput{" + "url=" + url + ", text=" + text + ", file=" + file +
            '}';
}
}

主要课程:

@Path("/analysisController")
public class AnalysisController {

@POST
@Path("/sayHello")
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public String sayHello(final TextInput text) {
    System.out.println("printing out the sent text: " + text);

    return "hello " + text.file;
}
}

和js:

var mockDataForThisTest = "json=" + encodeURI(JSON.stringify([
        {
            url: "http://www.example.com",
            text: "txext text tex",
            file: $scope.textarea
        }
    ]));

    var httpRequest = $http({
        method: 'POST',
        url: '/rest/analysisController/sayHello/',
        data: mockDataForThisTest,
        headers: {
            'Content-Type': 'application/json'
        }
    }).success(function(data, status) {
        $scope.textarea = data;
        console.log(data);
    }).error(function(error) {
        console.log('error!');
    });

这就是我现在所有的,我希望它有帮助。

非常感谢你。


在web.xml中启用JacksonFeature。 另请参阅ServerProperties

<servlet>
    <servlet-name>Jersey REST Service</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.your.packages</param-value>
    </init-param>
    <init-param>
      <param-name>jersey.config.server.provider.classnames</param-name>
      <param-value>org.glassfish.jersey.jackson.JacksonFeature</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>




jersey