oks*_*ayt 29 java json spring-mvc jackson
我熟悉如何@Controller使用@ResponseBody注释从我的方法返回json .
现在我正在尝试将一些json参数读入我的控制器,但到目前为止还没有运气.这是我的控制器的签名:
@RequestMapping(value = "/ajax/search/sync")
public ModelAndView sync(@RequestParam("json") @RequestBody SearchRequest json) {
Run Code Online (Sandbox Code Playgroud)
但是当我尝试调用这个方法时,spring抱怨说:
Failed to convert value of type 'java.lang.String' to required type 'com.foo.SearchRequest'
删除@RequestBody注释似乎没有什么区别.
手动解析json是有效的,所以Jackson必须在classpath中:
// This works
@RequestMapping(value = "/ajax/search/sync")
public ModelAndView sync(@RequestParam("json") String json) {
SearchRequest request;
try {
request = objectMapper.readValue(json, SearchRequest.class);
} catch (IOException e) {
throw new IllegalArgumentException("Couldn't parse json into a search request", e);
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我想尝试做一些不受支持的事情吗?
ska*_*man 44
您的参数要么是一个@RequestParam,或者一个@RequestBody,不能同时使用.
@RequestBody用于POST和PUT请求,其中请求的主体是您要解析的内容.@RequestParam用于命名参数,可以是URL,也可以是多部分表单提交.
所以你需要决定你需要哪一个.你真的想把你的JSON作为请求参数吗?这通常不是AJAX的工作原理,它通常作为请求体发送.
尝试删除@RequestParam并查看是否有效.如果没有,并且您确实将JSON作为请求参数发布,那么Spring将无法帮助您在没有其他管道的情况下处理它(请参阅自定义WebDataBinder初始化).
| 归档时间: |
|
| 查看次数: |
62120 次 |
| 最近记录: |