cat*_*ser 6 javascript java spring angularjs
我有一个 AngularJS Web 应用程序,看起来它正确地将 JSON 发送到 Tomcat 服务器,但服务器收到空值。这个问题没有帮助,因为我的属性名称已经是小写,并且这个问题没有帮助,因为我已经有了符号@RequestBody。编辑:正如评论中指出的,我实际上没有这个符号。我读错了。
这是有问题的服务器方法:
\n\n@PostMapping(path="/kind/add")\npublic @ResponseBody String addNewKind(Kind kind) throws Exception {\n if (kind.getName() == null) {\n throw new Exception("Name not found.");\n }\n kindRepository.save(kind);\n return "Saved";\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这是它期望接收的 Kind 对象:
\n\n@Entity\npublic class Kind {\n\n @Id\n @GeneratedValue(strategy=GenerationType.AUTO)\n private int id;\n private String name;\n @OneToMany(mappedBy="kind")\n private Set<Card> cards;\n\n public int getId() {\n return id;\n }\n\n public void setId(int id) {\n this.id = id;\n }\n\n public String getName() {\n return name;\n }\n\n public void setName(String name) {\n this.name = name;\n }\n\n public Set<Card> getCards() {\n return cards;\n }\n\n public void setCards(Set<Card> cards) {\n this.cards = cards;\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这是发出请求的方法:
\n\n@PostMapping(path="/kind/add")\npublic @ResponseBody String addNewKind(Kind kind) throws Exception {\n if (kind.getName() == null) {\n throw new Exception("Name not found.");\n }\n kindRepository.save(kind);\n return "Saved";\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这是发送到服务器的 JSON:
\n\n{"name":"Something"}\nRun Code Online (Sandbox Code Playgroud)\n\n注意:id我假设我可以在不发送或参数的情况下逃脱cards,因为id它是自动生成的并且cards可以为空;但是,在发送以下 JSON 时,我得到相同的 null 结果:
{"id":0,"name":"Something","cards":[]}\nRun Code Online (Sandbox Code Playgroud)\n\n这些是请求标头:
\n\n@Entity\npublic class Kind {\n\n @Id\n @GeneratedValue(strategy=GenerationType.AUTO)\n private int id;\n private String name;\n @OneToMany(mappedBy="kind")\n private Set<Card> cards;\n\n public int getId() {\n return id;\n }\n\n public void setId(int id) {\n this.id = id;\n }\n\n public String getName() {\n return name;\n }\n\n public void setName(String name) {\n this.name = name;\n }\n\n public Set<Card> getCards() {\n return cards;\n }\n\n public void setCards(Set<Card> cards) {\n this.cards = cards;\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\nkind这是我在调试模式下查看对象参数时服务器收到的内容:
kind= Kind\n cards= null\n id= 0\n name= null\nRun Code Online (Sandbox Code Playgroud)\n
您需要在方法上使用@RequestBody注释。您的控制器不知道主体是什么,因此您发布的对象永远不会绑定(或永远不会“创建”)到您的方法的 Kind 参数。
@PostMapping(path="/kind/add")
public String addNewKind(@RequestBody Kind kind) throws Exception {
if (kind.getName() == null) {
throw new Exception("Name not found.");
}
kindRepository.save(kind);
return "Saved";
}
Run Code Online (Sandbox Code Playgroud)
如果您期望返回新的“Kind”,您会希望控制器方法如下所示:
@PostMapping(path="/kind/add")
public Kind addNewKind(@RequestBody Kind kind) throws Exception {
if (kind.getName() == null) {
throw new Exception("Name not found.");
}
return kindRepository.save(kind);
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我注意到当您写出 JSON 时,您在 JSON 中使用了单引号。由于您正在使用 转换数据angular.toJson(),因此应该没问题。如果您尝试通过直接发送 JSON 字符串进行交互,这通常不起作用。JSON 不使用单引号。
| 归档时间: |
|
| 查看次数: |
8906 次 |
| 最近记录: |