2016-05-31 172 views
0

我发送协议缓冲区对象在发布请求,但另一方面,我无法获得对象,因为生成的类(协议缓冲区)没有空的构造函数。所以它无法构造@ModelAttribute。协议缓冲区 - @ModelAttribute

@RequestMapping(value = "/path", method = RequestMethod.POST) 
public string saveInvoice(@ModelAttribute(value = "person") ModelProtos.Person person) { 
    ... 
} 

有什么建议吗?

注意我能够返回Protocol Buffer对象。

+0

protobuf旨在被序列化为/从二进制数据。你有一个自定义的'HttpMessageConverter'产生二进制数据(例如['ProtobufHttpMessageConverter'](http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/converter/protobuf/ ProtobufHttpMessageConverter.html))或你如何使用它们? – zapl

+0

是的,我正在使用ProtobufHttpMessageConverter。它在spring-boot的配置中注册为bean – hybaken

+2

使用'RequestBody'而不是'ModelAttribute'这些事情是完全不同的。 –

回答

1

要转换一个物体,您需要使用@RequestBody,这也是使用HttpMessageConverter s的机制。

@ModelAttribute适用于您提交常规表单或请求参数并希望将其绑定到对象的情况。

关于此问题,还有一个blog entry,虽然有点过时,因为它不使用自动配置,而是“手动”但仍提供信息。