【问题标题】:Spring MVC ajax form submittingSpring MVC ajax 表单提交
【发布时间】:2014-08-09 13:47:57
【问题描述】:

我有两个实体:Word 和 Notebook。我正在尝试使用@987654321 将单词保存到数据库中,@Spring MVC 可以设置为自动将传入的 JSON 字符串绑定到 Java 对象中,并且效果很好。但是有一个与外键相关的问题。如果我的 Word 实体依赖于 Notebook 实体怎么办。

这是我向控制器发送请求的方式

$.ajax({
    type: "POST",
    url: "/doAddWord",
    data: JSON.stringify({ word: word, translation: translation, transcription: transcription, example: examples }),
    contentType: 'application/json',
    success: function() {
       alert('success');
           }
      });

这是控制器中的方法:

@RequestMapping(value = "/doAddWord", method = RequestMethod.POST, headers = {"Content-type=application/json"})
    @ResponseBody
    public void addWord(@RequestBody Word word, HttpSession session) {
        Integer userId = (Integer)session.getAttribute("userId");
        Notebook notebook = notebookService.findByName("default", userId);
        word.setNotebook(notebook);
        wordService.add(word);
    }

正如您在我的控制器中看到的那样,我通过笔记本名称(现在它是硬编码的“默认”)和用户 ID 从数据库中获取笔记本。在我的 jquery 代码中,我应该发送笔记本名称。我不能只将笔记本名称添加到我的 json 中,因为我得到 500 Erorr 并且它不仅仅是 String 它是 Object。

有什么方法可以向控制器发送多数据:json 和一些值,或者可能是我如何实现它的其他提示。

提前致谢。

【问题讨论】:

    标签: ajax json spring-mvc


    【解决方案1】:

    您可以使用 URL 指定要添加单词的笔记本 (RESTful approach):

    @RequestMapping(value = "/notebooks/{name}/words", method = RequestMethod.POST, headers = {"Content-type=application/json"})
    @ResponseBody
    public void addWord(
        @PathVariable("name") String notebookName, 
        @RequestBody Word word, 
        HttpSession session) { ... }
    

    或者,如果您更喜欢 RPC 风格的方法,您可以将笔记本名称添加到您的命令对象:

    @RequestMapping(value = "/doAddWord", method = RequestMethod.POST, headers = {"Content-type=application/json"})
    @ResponseBody
    public void addWord(@RequestBody AddWordCommand command, HttpSession session) { ... }
    

    .

    public class AddWordCommand {
        private String notebookName;
        private Word word;
        ...
    } 
    

    【讨论】:

      猜你喜欢
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-14
      • 1970-01-01
      • 2015-08-05
      相关资源
      最近更新 更多