2016-07-29 12 views
1

mir eine $ http Funktion in Winkel- und einem Controller, aber die Steuerung ruf keine Daten aus Winkeln senden, in dem Protokolldruck

überspringen CORS Verarbeitung : Antwort enthält bereits "Access-Control-Allow-Origin" header

ich meine Filter in web.xml Datei auf die Header haben

configurate
response.setHeader("Access-Control-Allow-Origin", "*"); 
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); 
response.setHeader("Access-Control-Max-Age", "3600"); 
response.setHeader("Access-Control-Allow-Headers", "Content-Type, x-requested-with"); 

meine Winkelfunktion ist diese

 app.controller('LoadCardController', function($scope, $http) { 

    $scope.executor = function() { 

     var person = { 
      name : 'Prueba', 
      todayDate : 1469679969827 
     }; 

     console.log("DATA=> ", data); 

     $http({ 
      method : 'POST', 
      url : 'http://localhost/myWeb/addPerson', 
      data : person, 
      headers : { 
       'Content-Type' : 'application/json' 
      } 
     }).then(function successCallback(response) { 
      console.log("success"); 
      console.log(response); 
     }, function errorCallback(response) { 
      console.log("error"); 
      console.log(response); 

     }); 
    } 

}); 

und mein Controller ist dies ...

@ResponseBody 
      @RequestMapping(path = "/addPerson", method = RequestMethod.POST) 
      public Person addPerson(final Person person) throws CustomException { 

       person.setAge("18"); 
       person.setBithDay("15"); 

       LOGGER.trace("Add person with data {}", person); 

       return person; 

      } 

      }); 
     } 

wenn in der Steuerung kommen, Daten der Person null ist, für den Namen und todayDate Attribute, die durch senden wird ich in eckigem.

mein Controller ist jetzt sehr einfach, weil nur die gleiche Person objet Rückkehr

+0

Ich glaube nicht, dass es etwas zu tun hat CORS als Spring Controller ist in der Lage, die Anfrage zu empfangen, wie Sie sagen. Müssen Sie CORS für alle Hosts überhaupt aktivieren? – Matt

Antwort

0

Von dem, was Sie hier gezeigt haben, scheint es, wie der Antrag durchmacht, aber die Daten macht es nicht auf Ihre person Parameter in der Spring-Controller-Methode. Es könnte ein paar verschiedene Ursachen geben.

Erstens könnte es sein, dass der Anfragetext nicht auf den Parameter person Ihrer Spring-Steuerung gemappt wird. Sie können Spring mitteilen, dass dies automatisch geschieht, indem Sie die @RequestBody Annotation (Details here) vor dem Methodenparameter verwenden. In Ihrem Beispiel:

@ResponseBody 
@RequestMapping(path = "/addPerson", method = RequestMethod.POST) 
public Person addPerson(@RequestBody Person person) throws CustomException { 

    person.setAge("18"); 
    person.setBithDay("15"); 

    LOGGER.trace("Add person with data {}", person); 

    return person; 

} 

Wenn das es nicht lösen wird, könnte es ein Problem mit der Person Klasse sein. Im Minimum, muss sie haben:

public class Person { 
    private String name; 
    private String age; 
    private String bithday; 
    private Date todayDate; 

    public Person() { 
     // this depends how your serialization is set up 
    } 

    // getters and setters... 
} 

Eine Konvention ist eine separate Datentransfer-Objektklasse zu verwenden (dh PersonDto), der die Daten von dem Anforderungs Körper nimmt und bauen ein Person Objekt mit ihm (und umgekehrt), so dass Sie steuern können, wie die Einreichung dem Back-End zugeordnet wird. Weitere Informationen zu diesem Muster here.

0

Ich gebe Ihnen eine Option

Ihre DTO ist

public class Person { 
    private String name; 
    private String todayDate; 
    private String age; 
    private String bithDay; 
// getter and setters, etc.... 

AngularJS verwenden:

// Every properties matches with your DTO, example: name, todayDate looks... 
var formData = new FormData(); 
formData.append("name", 'Prueba'); 
formData.append("todayDate" , '1469679969827'); 

console.log("DATA=> ", formData); 
$http({ 
     method : 'POST', 
      url : 'http://localhost/myWeb/addPerson', 
      data : formData, 
      headers : { 
       'Content-Type' : undefined 
      } 
     }).then(function successCallback(response) { 
      console.log("success"); 
      console.log(JSON.stringify(response)); 
     }, function errorCallback(response) { 
      console.log("error"); 
      console.log(response); 

     }); 

Ihr Log-in Ihrem Browser in meinem Fall Chrome sieht ....

success 
myjs.js:1744 {"data":{"name":"Prueba","todayDate":"1469679969827","age":"18","bithDay":"15"},"status":200