我正在尝试将POJO作为帖子页面而不是ajax调用(因为我最后返回一个文件而且请求对于GET调用来说太复杂了。)
基本上POJO看起来像:
@Data public class A { private String a; private String b; private String c; }
@Data public class B { private Integer n; private Map<String, A> m; }
控制器需要B项,例如:
@Controller
public class Controller {
@PostMapping("/url") public HttpEntity<byte[]> getFile(@RequestBody B b) {
return getResponseEntityInformationWhatever(b);
}
}
因此表单类型动态生成“隐藏”类型字段,并尝试将表单提交到以下内容:
<form method="post" ...>
<input type="hidden" name="n" value="3" />
<input type="hidden" name="m['someKey']['a']" value="foo" />
<input type="hidden" name="m['someKey']['b']" value="bar" />
<input type="hidden" name="m['someKey']['c']" value="foobar" />
<input type="hidden" name="m['anotherKey']['a']" value="one" />
<input type="hidden" name="m['anotherKey']['b']" value="two" />
<input type="hidden" name="m['anotherKey']['c']" value="three" />
</form>
注意:我也试过没有'
(即m[someKEy][a]
)
注意2 :这里的每个例子都是我在SO上手动输入的,真实的例子有点大,所以请忽略语法错误。
春天有没有本地方式来获取这些信息,还是我必须采取另一种方式? 目前请求返回415,控制器甚至没有接收请求。
由于
修改
使用@RequestBody B b
切换@RequestParam Map<String, String> params
时,我会获得适当的地图。所以在这种情况下:
{
"n": 3,
"m['someKey']['a']": "foo",
"m['someKey']['b']": "bar",
...
}