当前位置: 首页 > 知识库问答 >
问题:

泽西和波乔

叶衡虑
2023-03-14

我花了太多的时间(我想超过10个小时)试图弄清楚如何让基本的json调用(来自angularjs)在我的泽西2.4上打开和处理。我已经在谷歌上尝试了所有可能的结果,但仍然在得到一个

415(不支持的媒体类型)

客户端和

组织。玻璃鱼。运动衫消息内部的MessageBodyProviderNotFoundException:找不到媒体类型=应用程序/json,类型=类的MessageBodyReader。网络可读性。控制器。jsonmodels。TextInput,genericType=class。网络可读性。控制器。jsonmodels。文本输入。

在服务器端。

我会在这里写下我在尝试解决这个问题时更改的所有可能的文件,希望它能帮助有人帮助我。目前,我真的不在乎它如何工作,只要它能工作,我确实理解我应该与杰克逊或格森合作的任何人。

依赖项(来自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>

来自网络。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!');
    });

这就是我目前所拥有的一切,我希望能有所帮助。

非常感谢。

共有3个答案

淳于健
2023-03-14

在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>
张璞
2023-03-14

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

删除com。太阳运动衫配置。所有物软件包com。太阳运动衫应用程序编程接口。json。POJOMappingFeature,它们是1。x特定,在Jersey 2中没有使用。x、 第一件已被球衣取代。配置。服务器供应商。包,第二个包已被删除(使用POJO JSON)

如果您正在使用jersey media json jackson模块,则需要在JAX-RS应用程序的扩展或web中注册JacksonFeature。xml(使用ServerProperties中的属性)-请参阅Jackson一章。当模块位于类路径上时,会自动注册MOXy(jersey media MOXy)。

钱睿范
2023-03-14

我加上这个作为我自己的答案,因为我认为这将有助于任何人与一个可怕的工作副本泽西在未来。同时,@Michal Gajdos的答案非常有用,当你将来遇到问题时,你也应该联系他的文本。

最终帮助我的是一个依赖,其中包括几乎所有你需要的东西。简单地添加它并试一试

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

来源:Git

 类似资料:
  • (我在命中RESTendpoint时有)。 如何正确设置焊接(最好是编程方式)?

  • 我在解析JSON到日期对象时遇到一个问题。

  • 我目前使用的是球衣 我现在要做的是设置泽西,这样当查询参数进来时(比如缩进),我可以告诉Jackson以“更漂亮的格式,也就是缩进”序列化JSON。您可以通过使用SerializationConfig.Feature.INDENT_OUTPUT配置JSON映射器来轻松地告诉Jackson这样做。 问题是,我如何在每个请求的基础上获取一个queryparam并使用它来修改Jackson的输出?

  • 问题内容: 我的问题是:为什么在创建部署在某种servlet容器(如jetty或tomcat)上的应用程序时执行JavaSE应用程序和ServletModule时需要创建AbstractModule?它们之间有什么区别? 我需要将Jersey与Guice集成在一起。是否需要注册Guice的存在才能以某种方式使用它?我是否可以仅启用注入并在我想要的任何地方(常规类,过滤器,处理程序,服务,DAO等)

  • 问题内容: 我在Spring启动项目中有一个与Jackson配置有关的问题 如Spring Boot博客中所述 我尝试自定义对象序列化。 在我的配置中添加新的配置bean之后 当我尝试输出类User的实例时,json结果不在CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES中 json输出是: 并不是 也许我需要在Jersey配置中注册一些东西才能激活我的自定义ob

  • 我正在尝试使用JAX-RS(Jersey)构建JSON RESTful Webservice。我也在使用Maven构建应用程序。 我的第一个方法是 pom之后。xml- 所以我补充道 到我的pom文件。其他lib文件(例如jackson-cors-asl-1.7.1.jar、jackson-jaxrs-1.7.1.jar、jaxb impl,…)也可以在生成的war文件中找到//编辑:它还下载st