【问题标题】:Returning response of spring controller to the angular js将弹簧控制器的响应返回到角度js
【发布时间】:2016-10-04 22:32:16
【问题描述】:

当用户尝试将表单注册到我的 java 脚本时,我试图将我的 rest 控制器的响应传递给我的 java 脚本,无论用户名是否可用,这取决于 spring 控制器返回的语句。但是我试图在中使用模型属性我的弹簧控制器。我在我的 js 中捕获这个的方式是什么。从 servlet 的角度来看,它就像我们已经完成的那样完成。写下如何用 spring 完成。

我的 Spring 控制器

@RequestMapping(method = RequestMethod.POST,value = "/checkUserName", headers = "Accept=application/json")
public org.weber.nag.model.UserRegistration checkUserName(@RequestBody org.weber.nag.model.UserRegistration userReg, Model model) {
    userDao.getAllUsers(userReg);
    System.out.println(userDao.getAllUsers(userReg));
    model.addAttribute("success", userReg);
    return userReg;
}

AngularJS

   var formData = {
                 'userName'  : $scope.ctrl.newCustomer.userName
          };
         var response =$http.post('http://localhost:8081/Weber/user/checkUserName', formData);
         response.success(function(data, status, headers, config) {

             var cntrlMessage = $('#message');
                message = cntrlMessage;
                //alert(message);
            alert(message);
             $scope.list.push(data);
         });
         response.error(function(data, status, headers, config) {
            alert( "User name already exists.");
         });

更新的 Spring 控制器

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

@RequestMapping(method = RequestMethod.POST,value = "/checkUserName", headers = "Accept=application/json")
public String checkUserName(@RequestBody org.weber.nag.model.UserRegistration userReg, ModelMap model) {
    userDao.getAllUsers(userReg);
    System.out.println(userDao.getAllUsers(userReg));
    String message = userDao.getAllUsers(userReg);
    model.addAttribute("message", message);
    return message;
}
}

我尝试使用 $http 访问休息控制器,它运行良好,我怎样才能让休息控制器休息,说用户可用/用户不可用回到我的 js 作为警报。

谢谢

【问题讨论】:

    标签: angularjs spring rest


    【解决方案1】:

    您的代码似乎使用 Ajax 来完成这项工作。

    那么您的 Ajax 成功方法期望接受文本响应。

    话虽如此:

    1. 从您的控制器中返回您想要显示为合法答案的任何字符串/文本:user available/user not available

    2. @ResponseBody 注释你的控制器,这将告诉 Spring 在 HTTP 响应中返回字符串答案。因此,您的 Ajax 成功方法将接受带有 user available/user not available 消息的 HTTP 响应。

    3. 确保您实际上是使用 console.log 在 js 文件中获取该字符串

      @RequestMapping(method=RequestMethod.POST,value="/checkUserName")   
      @ResponseBody
      public UserRegistration checkUserName(@RequestBody UserRegistration userReg, Model model) {
          userDao.getAllUsers(userReg);
          System.out.println(userDao.getAllUsers(userReg));
          model.addAttribute("success", userReg);
          return userReg;
      }
      

    【讨论】:

    • 是的,我已经用@RestContorller 注释了我的弹簧控制器。试图返回一个字符串响应,但运气不好,它没有显示在控制台中。我将在我的帖子中发布更新模块。
    • 我说的是@ResponseBody而不是@RestContorller
    • 如果我是正确的,RestCotroller 也会处理 Responsebody。无论如何我会添加你建议的注释:)。即使我添加了 responsebody 仍然没有在我的 js 中显示任何警报但是当我点击控制器我可以看到“用户可用/用户不可用”我的 Eclipse 控制台
    • 如果你成功地点击了控制器,那么问题出在你的 Angular.js 代码上。看来你没有在你的 js 文件上点击成功方法。
    • 从控制器你想返回一个字符串,一个文本答案,这就是 Ajax 的工作原理
    猜你喜欢
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    相关资源
    最近更新 更多