javascript - AngularJs 表单发布数据在我的 spring Controller 中给出空值

标签 javascript angularjs spring spring-mvc null

大家好,我正在尝试使用 angular 发布一个表单,但我在我的 Spring Controller 中得到了空值。同样在我的控制台中,我看到了 sysout 的空值。此外,即使我看到打印了公牛,我也会收到错误警报在我的控制台上。

我的 JS Controller

angular.module('ngMailChimp', ['ngAria', 'ngMessages', 'ngAnimate'])
.controller('SignUpController', function ($scope, $http) {
    $http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded; charset=utf-8";
    var ctrl = this,
        newCustomer = { firstName:'',lastName:'',email:'',streetName:'',aptName:'',cityName:'',stateName:'',countryName:'', zipName:'', userName:'',password:'' };

    var signup = function () {
        if( ctrl.signupForm.$valid) {
            ctrl.showSubmittedPrompt = true;
            var formData = {
                    'firstName' : $scope.ctrl.newCustomer.firstName,
                    'lastName' : $scope.ctrl.newCustomer.lastName,
                    'email' : $scope.ctrl.newCustomer.email,
                    'streetName' : $scope.ctrl.newCustomer.streetName,
                    'aptName' : $scope.ctrl.newCustomer.aptName,
                    'cityName' : $scope.ctrl.newCustomer.cityName,
                    'stateName' : $scope.ctrl.newCustomer.stateName,
                    'countryName' : $scope.ctrl.newCustomer.countryName,
                    'zipName' : $scope.ctrl.newCustomer.zipName,
                    'userName' : $scope.ctrl.newCustomer.userName,
                    'password' : $scope.ctrl.newCustomer.password
            };

            var response = $http.post('http://localhost:8080/Weber/user/save', JSON.stringify(formData));
            response.success(function(data, status, headers, config) {
                $scope.list.push(data);
            });
            response.error(function(data, status, headers, config) {
                alert( "Exception details: " + JSON.stringify({data: data}));
            });

        }
    };

我的 Spring Controller

@RestController
@RequestMapping(value = "/user")
public class UserRegistrationControllerImpl implements UserRegistrationController  {

@Autowired
UserRegistrationDao userDao;

@RequestMapping(value = "/save", method = RequestMethod.POST)
public String saveUser(UserRegistration userReg) {
    System.out.println(userReg.getFirstName()+" "+userReg.getLastName());
    userDao.registerUser(userReg);
    return "success";
}

请帮帮我

谢谢 标记。

最佳答案

没有指定用于将 JSON 转换为 Java 对象的映射器。

如果您希望将 JSON 转换为 UserRegistration 的对象,请使用 Jackson(dore, databind, annotations)。

检查一下:Convert nested java objects to Jackson JSON

需要在dispatcher-servlet中添加如下内容。这是为了将 JSON 映射到 Java 对象:

<beans:bean
        class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <beans:property name="messageConverters">
            <beans:list>
                <beans:ref bean="jsonMessageConverter" />
            </beans:list>
        </beans:property>
    </beans:bean>

    <!-- Configure bean to convert JSON to POJO and vice versa -->
    <beans:bean id="jsonMessageConverter"
        class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
    </beans:bean>

编辑 1: Controller 中的方法是这样的吗?

@RequestMapping(value = "/save", method = RequestMethod.POST, headers = "Accept=application/json")
public String saveUser(@RequestBody UserRegistration userReg) {
    System.out.println(userReg.getFirstName()+" "+userReg.getLastName());
    userDao.registerUser(userReg);
    return "success";
}

如果您不响应要使用的结果的网页,请使用上面的内容。如果您希望从此方法返回某些内容并显示在网页中或在其他地方使用,则方法声明将更改为:

public @ResponseBody String saveUser(@RequestBody UserRegistration userReg)

编辑 2:

    $scope.post = function() {
        $scope.data = null;
        $http({
            method : 'POST',
            url : 'save',
            params : {
            firstName : $scope.ctrl.newCustomer.firstName,
            lastName : $scope.ctrl.newCustomer.lastName,
            email : $scope.ctrl.newCustomer.email,
            streetName : $scope.ctrl.newCustomer.streetName,
            aptName : $scope.ctrl.newCustomer.aptName,
            cityName : $scope.ctrl.newCustomer.cityName,
            stateName : $scope.ctrl.newCustomer.stateName,
            countryName : $scope.ctrl.newCustomer.countryName,
            zipName : $scope.ctrl.newCustomer.zipName,
            userName : $scope.ctrl.newCustomer.userName,
            password : $scope.ctrl.newCustomer.password
            }
        }).success(function(data, status, headers, config) {
             $scope.list.push(data); 
        }).error(function(data, status, headers, config) {
            alert("Exception");
        });
    };

关于javascript - AngularJs 表单发布数据在我的 spring Controller 中给出空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39841114/

相关文章:

自定义命名空间中的 Javascript 函数

javascript - 如何检查页面上的所有 vimeo 视频是否都是通过单击按钮播放的?

javascript - 如何获取 div 中的内容以及所有 html 标签以及文本框等标签中存在的值

javascript - 有没有办法通过javascript检测Iphone是否摇动?

javascript - 在AngularJS中,当制作指令时,有没有办法使用链接函数来操作模板的DOM?

javascript - $ionicPlatform.ready(function() 中的 Ionic $state.go

Java、Spring、JSP编码

angularjs - 使用 ui-router 显示 404 错误页面时如何不更改 url

java - org.springframework.beans.factory.NoSuchBeanDefinitionException : No bean named 'itemAttrService' is defined

Java Jpa @GeneratedValue 智能生成空值和非空值