【问题标题】:How to pass JSON array from AngularJS Controller to the Spring Controller?如何将 JSON 数组从 AngularJS 控制器传递到 Spring 控制器?
【发布时间】:2017-03-16 18:48:58
【问题描述】:

我在 Spring 4 和 Hibernate 5 中使用 AngularJS 制作 SPA。

在将 JSON 数组从 AngularJS 控制器传递到 Spring 控制器时出现错误。

所有字段值都成功传入 angular JSON 数组,但未传入 Spring 控制器。

错误:无法读取 JSON:;嵌套异常是 com.google.gson.JsonSyntaxException:

我的项目结构如下。

Spring_Hibernate_MVC =src -com->karmesh->mvcApp->controller->register->RegisterController.java =网页内容 -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);

    }
}

【问题讨论】:

    标签: java angularjs json spring-mvc


    【解决方案1】:

    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);
    
        }
    

    【讨论】:

      【解决方案2】:

      您的请求中缺少contentType: 'application/json'

      【讨论】:

      • 我试过这个。我的编码不需要它。它已经在传递 contentType: 'application/json'。
      【解决方案3】:

      使用 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);
      
          }  
      

      【讨论】:

      • 这在哪里存在 JsonConvert.DeserializeObject(哪个 .jar)?
      • 那是c#,google一下,找到java jsondeserilizer。
      猜你喜欢
      • 1970-01-01
      • 2019-05-13
      • 2017-05-21
      • 2013-08-01
      • 1970-01-01
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多