[英]Not able to POST JSON data to Jersey Restful Web service
我正在嘗試將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");
});
};
});
@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;
}
}
<?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新澤西servlet配置,因為看到這里
<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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.