gpt4 book ai didi

java - 无法将 JSON 数据发布到 Jersey Restful Web 服务

转载 作者:太空宇宙 更新时间:2023-11-04 12:54:49 25 4
gpt4 key购买 nike

我正在尝试将 JSON 数据发送到我的 RESTful Web 服务。对于简单的 GET 类型,配置工作正常。仅问题在于 POST 类型。

我的角度代码

var app = angular.module('myApp', []);
app.controller('MyController', function($scope,$http) {
$scope.pushDataToServer = function() {
$http({
method: 'POST',
url: 'rest/Board/autoSave',
headers: {'Content-Type': 'application/json'},
data:'{"firstName":"Syed", "lastName":"Chennai"}',
}).success(function (data){
$scope.status=data;
}).error(function(data, status, headers, config) {
alert("error");
});
};
});

我的Java代码

@Path("/Board")
public class BoardAutoSaveService {

@POST
@Path("/autoSave")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.TEXT_PLAIN})
public String autoSave(Message msg) throws Exception{
System.out.println("Calling Autosave.");
System.out.println("First Name = "+msg.getFirstName());
System.out.println("Last Name = "+msg.getLastName());
return null;
}
}

消息类

package com.intu;
import java.util.Date;
public class Message {

private String firstName;

private String lastName;

private int age;

private Date date;

private String text;



public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public Date getDate() {
return date;
}

public void setDate(Date date) {
this.date = date;
}

public String getText() {
return text;
}

public void setText(String text) {
this.text = text;
}

}

Web.xml

      <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>iNTU-1</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Jersey RESTful Application</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.dao</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Jersey RESTful Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>

我错过了什么吗?

错误是

SEVERE: A message body reader for Java class com.intu.Message, and Java type class com.intu.Message, and MIME media type application/json was not found.
The registered message body readers compatible with the MIME media type are:
application/json ->
com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$App
com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$App
com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$App
*/* ->

最佳答案

您只有默认的 Jersey JSON 提供程序,它需要模型类上的 @XmlRootElement 。您可以看到可用的提供程序,其中之一是 JSON**RootElement**Provider

com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$App
com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$App
com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$App

此提供程序用于对用 @XmlRootElement 注释的类进行(反)序列化。

如果你有以下依赖

<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>${jersey.version}</version>
</dependency>

然后它还应该引入 Jackson 提供程序,该提供程序不需要 @XmlRootElement,但您仍然需要将 Jersey 配置为使用 Jackson 而不是其默认提供程序。要配置它,您需要将其添加到您的 web.xml Jersey servlet 配置中,如 here 所示。

<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>

或者,如果您不使用 web.xml,请在 ResourceConfig 子类构造函数中添加以下内容

public class AppConfig extends PackagesResourceConfig{

public AppConfig() {
getProperties().put(JSONConfiguration.FEATURE_POJO_MAPPING, true);
}
}

关于java - 无法将 JSON 数据发布到 Jersey Restful Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35497759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com