我在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应用程序?
谢谢,对不起我的英语。
答案 0 :(得分:0)
您必须使用适合您数据结构的MessageConverter和JacksonMapper。
这里有一些教程
http://magicmonster.com/kb/prg/java/spring/webmvc/jackson_custom.html
http://www.java-allandsundry.com/2014/09/customizing-httpmessageconverters-with.html
答案 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);
}