带有Ember数据的Spring MVC CRUD控制器

时间:2015-11-10 20:37:05

标签: spring spring-mvc ember.js ember-data crud

我在Spring MVC API中有一个CRUD控制器。

这是我的创建方法:

    @Override
    @JsonView(ApiView.FormView.class)
    @RequestMapping(method = RequestMethod.POST, consumes = ApiMediaType.jsonContentType, produces = ApiMediaType.jsonContentType)
    public ApiResponse create(@RequestBody @Valid Entity entity, BindingResult result) {
        if (result.hasErrors()) return new ApiResponse(result.getAllErrors());
        service.add(entity);
        return new ApiResponse(entity);
    }

这很好用。

如果我将此类数据发送到API,则可以正常工作

   {
        "email":"user@company.com",
        "password":"secret!",
        "firstName":"John",
        "lastName":"Doe",
        "title":"Mr."
    }

问题在于我使用Ember JS和Ember Data。我的适配器正在发送此数据:

{
   "data":{
      "attributes":{
         "email":"user@company.com",
         "firstName":"John",
         "lastName":"Doe",
         "title":"Mr.",
      },
      "type":"users"
   }
}

这不是@Valid User form,我的UserController在下面声明的create方法中期望:

public ApiResponse create(@RequestBody @Valid User form, BindingResult result) {}

如何将Ember发送给User对象的数据转换为Spring应用程序?

谢谢,对不起我的英语。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

您忘记了@ResponseBody注释。

试试这个:

@Override
@JsonView(ApiView.FormView.class)
@RequestMapping(method = RequestMethod.POST, consumes = ApiMediaType.jsonContentType, produces = ApiMediaType.jsonContentType)
@ResponseBody    
public ApiResponse create(@RequestBody @Valid Entity entity, BindingResult result) {
    if (result.hasErrors()) return new ApiResponse(result.getAllErrors());
    service.add(entity);
    return new ApiResponse(entity);
}