2016-11-03 21 views
0

Spring 4でHibernate 5のAngularJSを使用してSPAを作成しています。AngularJS ControllerからJSON配列をSpring Controllerに渡すには?

AngularJSコントローラからSpring ControllerにJSON配列を渡しているときにエラーが発生しました。

すべてのフィールドの値は、角度のJSON配列では成功していますが、Springコントローラでは渡されません。

​​

私のプロジェクト構成は以下の通りです。

Spring_Hibernate_MVC =src -com->karmesh->mvcApp->controller->register->RegisterController.java =WebContent -js->app->RegisterController.js -Views->Register.html

登録、HTML

<div id="DivRegisterMain" ng-controller="RegisterController"> 
    <form name="myForm" novalidate> 

:::://Form fields here. 
     <input type="submit" value="SubmitTest" ng-click="submit()" ><br> 
    </form> 

</div> 

app.js

var routeApp=angular.module("RouteApp",['ngRoute']); 

RegisterController.js

routeApp.controller("RegisterController", function($scope, $http) { 

    $scope.regJson = { 
     "is" : 1, 
     "fname" : "", 
     "lname" : "", 
     "gender" : "", 
     "dob" : "", 
     "email" : "", 
     "contact" : "", 
     "yop" : "", 
     "degree" : "", 
     "branch" : "", 
     "perc" : "", 
     "state" : "", 
     "city" : "" 

    }; 

$scope.studentList = []; 

$scope.submit = function() { 

     var req = { 
       method: 'POST',     
       url: 'http://localhost:8050/Spring_Hibernate_MVC/registerStudent.do',    
       data: $scope.studentList, 

     }; 

     $http(req). 
     then(function(response){ 
      console.log(response); // prints true or false 
      if (response) 
       console.log("in success"); 
      else 
       console.log("in fail"); 
      $scope.studentList=[]; 
     }, function(response){ 
      console.log(response.status); 
      console.log("in error"); 

     }); 


    }; 

RegisterController.java

@EnableWebMvc 
@RestController 
@RequestMapping("/") 
public class RegisterController { 

    @Autowired 
    private RegisterService registerService; 

    public RegisterController() { 
     System.out.println(this.getClass().getSimpleName() + "created.."); 
    } 


    @ResponseBody 
    @RequestMapping(value="/registerStudent.do", method = RequestMethod.POST) 
    public boolean registerStudent(@RequestBody List<RegisterDTO> stdList) {  
     System.out.println("inside controller.."); 

     if (stdList != null) { 
     System.out.println("success..."); 
      } 
      return registerService.isStudentExist(stdList); 

    } 
} 

答えて

0

使用JSONのシリアライズ/デシリアライズ

リクエストは、あなたがあなたのリクエストでcontentType: 'application/json'が欠落している

  var req = { 
       method: 'POST', url:'http://localhost:8050/Spring_Hibernate_MVC/registerStudent.do',    
       data: JSON.stringify($scope.studentList), 
      }; 

あなたの春のコントローラ

@ResponseBody 
    @RequestMapping(value="/registerStudent.do", method = RequestMethod.POST) 
    public boolean registerStudent(@RequestBody string data) { 
     List<RegisterDTO> stdList = JsonConvert.DeserializeObject<RegisterDTO>(data); // find java jsondeserializer 
     System.out.println("inside controller.."); 

     if (stdList != null) { 
      System.out.println("success..."); 
     } 
      return registerService.isStudentExist(stdList); 

    } 
+0

これは(.jarファイル)JsonConvert.DeserializeObject 存在しているのですか? –

+0

それはC#にあり、googleとjava jsondeserilizerを見つける。 – Arjun

0

する必要があります!

+0

これを試しました。私のコーディングは必要ありません。すでにcontentType: 'application/json'を渡しています。 –

0

RegisterController.js

$scope.submit = function() { 

     var req = { 
       method: 'POST',     
       url: 'http://localhost:8050/Spring_Hibernate_MVC/registerStudent.do',    
       data: angular.toJson($scope.studentList),// note this 

     }; 

    }; 

ダウンロードgson jarファイル。

RegisterController.js

@ResponseBody 
    @RequestMapping(value = "/registerStudent.do", method = RequestMethod.POST) 
    public boolean registerStudent(@RequestBody String data) { 

     Gson googleJson = new Gson(); 
     ArrayList stdList = googleJson.fromJson(data, ArrayList.class); 

     if (stdList != null) { 
      // store your stdList 
     } 
     return registerService.isStudentExist(stdList); 

    } 
関連する問題