簡體   English   中英

無法將JSON數據發布到Jersey Restful Web服務

[英]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");
       });      
    };
});

我的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新澤西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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM