java - @RequestBody 不适用于 Rest 服务

标签 java angularjs json spring rest

我正在使用 AngularJS 和使用 Spring 的 WildFly 开发 Web 应用程序。

我的问题是我快疯了,因为注释 @requestBody 似乎工作不正常。

这是我的服务:

@ResponseBody
@RequestMapping(value = "/keyuser", method = RequestMethod.POST,
  consumes = "application/json")
public KeyProfileUserSummary updateEmployee(@RequestBody KeyProfileUserSummary keyUser) {
return null;
}

这是我的对象 KeyProfileUserSummary 的成员:

private Integer id;
private String login;
private String password;
private String firstname;
private String lastname;
private UserRole userRole;

我不知道发生了什么,但我已经用其他类型的对象测试了这个服务,它工作得很好,但是在定义 KeyProfileUserSummary 时它不工作,我得到 ERROR 400 BAD REQUEST。我已经测试过将 @RequestBody 设置为“对象”,这样至少我可以看到即将发生的事情,并且从我的前端,我得到以下信息:

{id=3, login=aa, password=a, firstname=Martin, lastname=Müller, userRole=ROLE_USER} 

UserRole 是一个枚举。重要的是要明确 KeyProfileUserSummary 只是 KeyProfileUser 的摘要版本,但由于我在响应中获得的所有链接元素,我决定发送这个更轻的类。使用 KeyProfileUser 进行测试时效果很好,我在 Angular 端获得了 JSON 对象并可以将其发回。

在 Angular 方面,我没有对对象做任何事情。只需在列表中接收它,当按下编辑按钮时,只需将列表中的元素发回即可。这是我发送它的方式:

res = $http.post("url.../keyuser", user);

问题是,我的一切都与 KeyProfileUser 完美配合,但由于数据库可能变得非常庞大且引用资料很多,我决定切换到这个较轻的类,但现在我只得到这个 ERROR 400 BAD REQUEST ...我要上吊了:P

感谢您的帮助!

最佳答案

好吧,我终于找到了解决方案。

在我的 KeyProfileUserSummary 中,我只有一个采用 KeyProfileUser 并将属性设置为摘要版本的构造函数:

public KeyProfileUserSummary(KeyProfileUser keyProfileUser) {
  this.id = keyProfileUser.getId();
  this.login = keyProfileUser.getLogin();
  this.password = keyProfileUser.getPassword();
  this.firstname = keyProfileUser.getPerson().getFirstname();
  this.lastname = keyProfileUser.getPerson().getLastname();
  this.userRole = keyProfileUser.getUserRole();
}

显然,在调度程序 servlet 的第 993 行设置了一个断点(感谢@Clemens Eberwein 的提示)我意识到当从 JSON 对象解析时,Jackson 解析器需要一个空的构造函数!所以添加它解决了它并且完美地工作。

注意:对于 KeyProfileUser,它工作得很好,因为我们有用于 hibernate 的注释 @Entity,因此自动创建了空构造函数。

关于java - @RequestBody 不适用于 Rest 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35778628/

相关文章:

javascript - 点击似乎被模糊阻挡

c# - 如何不将属性与 JSON 数据绑定(bind)

java - Libgdx - 使用TexturePacker时出现错误

angularjs - Angular ui-router 解析父状态

java - src/test/中的 IntelliJ Idea JPA 实体

angularjs - 在 angularJS 服务中收到新项目时重新加载 ionic ng-repeat 列表

javascript - 遍历json对象并根据键名将子obj属性移动到父对象

r - 如何在 R 中解析具有堆叠多个 JSON 的文件?

java - 如何通过IntelliJ open api获取依赖列表

java - Parcel//ArrayList 的问题