簡體   English   中英

如何將對象從angularjs傳遞到spring控制器

[英]How to pass an object from angularjs to spring controller

我有一些角度代碼,要求輸入用戶名:

playCtrl.js var myApp = angular.module('myApp');

/*
 * CONTROLLERS METHOD
 */

myApp.controller('PlayController', ['$scope', '$http', function($scope, $http) {

var REQUEST_SERVICE_URI = '/Project2/play.do';
//var REQUEST_SERVICE_URI = 'http://13.59.197.145:8085/Project2/#/play';
var playerObject = {} // create playerObject

$scope.message = "Let's play!";
$scope.message2 = "Please enter your name";
$scope.user = {
        userid: '',
        username: '',
        roleId: '',
        statusId: ''

};

$scope.register = function() {

    playerObject = $scope.user;  // adding user to a playerObject
    console.log('playerObject.name: ' + playerObject.name);
    //console.log('playerObject: ' + $scope.user.name);

    console.log("REGISTER BUTTON WAS CLICKED");
    $http.post(REQUEST_SERVICE_URI, playerObject).
        then(function(playerObject) {
            alert("SUCCESS");
            //$scope.user = data;
        });
}
}])

然后我有我的SpringController.java試圖獲取此用戶對象:

@RestController
public class SpringController {


// has to accept 
@RequestMapping(headers="Accept=application/json", value="/play.do", method = RequestMethod.POST)
public String registerUser(Users user, BindingResult bindingResult, ModelMap modelMap, HttpSession session){
    Register r = new Register();
    System.out.println("TRYING TO CREATE A USER: " + user);

    if(r.createUser(user.getUsername())){
    session.setAttribute("username", user.getUsername());
    session.setAttribute("role", user.getRole());
    session.setAttribute("status", user.getStatus());

    System.out.println("Created user: " + user.getUsername());

    return "lobby";


    }else{

        return "login";

    }

}

我的控制台確實很好地打印了angularjs中的所有內容,並且還從Java端顯示了“正在嘗試創建用戶:” +用戶,但是它卻提示所有內容都為空:正在嘗試創建用戶:用戶[userid = 0,用戶名=空,角色ID =空,狀態ID =空](我的用戶創建實現僅需要一個用戶名,所有其他用戶都可以為空)

這是我的web.xml:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/beans.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
    <servlet-name>SpringDispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/beans.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>SpringDispatcher</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping> 

這是我從控制台收到的錯誤:

javax.validation.ConstraintViolationException: Validation failed for classes 

[com.revature.bean.Users] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
    ConstraintViolationImpl{interpolatedMessage='Username cannot be empty(1-20 characters)', propertyPath=username, rootBeanClass=class com.revature.bean.Users, messageTemplate='Username cannot be empty(1-20 characters)'}

Users.java:

package com.revature.bean;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.validation.constraints.Size;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.validator.constraints.NotEmpty;
import org.springframework.stereotype.Component;

@Component
@Entity
@Table(name = "Users")
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY, region = "myAwesomeCache")

public class Users {

@Id
@Column(name = "U_Id")
@SequenceGenerator(name = "UID_SEQ", sequenceName = "UID_SEQ")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "UID_SEQ")
private int userid;

@NotEmpty(message="Username cannot be empty(1-20 characters)")
@Size(min=1,max=20)
@Column(name = "Username")
private String username;


public Users() {
    super();
}

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "Role_ID")
private Roles role;

@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "Status_ID")
private Status status;

public Users(int userid, String username, Roles roleId, Status statusId) {
    super();
    this.userid = userid;
    this.username = username;
    this.role = roleId;
    this.status = statusId;
}

public Users(String username, Roles roleId, Status statusId) {
    super();
    this.username = username;
    this.role = roleId;
    this.status = statusId;
}

public int getUserid() {
    return userid;
}

public void setUserid(int userid) {
    this.userid = userid;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public Status getStatusId() {
    return status;
}

public void setStatusId(Status status) {
    this.status = status;
}



public Roles getRole() {
    return role;
}

public void setRole(Roles role) {
    this.role = role;
}

public Status getStatus() {
    return status;
}

public void setStatus(Status status) {
    this.status = status;
}

@Override
public String toString() {
    return "Users [userid=" + userid + ", username=" + username + ", roleId=" + role + ", statusId=" + status
            + "]";
}

}

我將如何正確發送對象?

我只是想出了辦法:我必須在SpringController方法的()內添加@RequestBody,然后將輸入從Object更改為String類型:

public String registerUser(@RequestBody String username, BindingResult bindingResult, ModelMap modelMap, HttpSession session)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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