通过POST提交结构化HashMap(不使用AJAX)

时间:2017-12-17 10:37:33

标签: java html spring forms spring-mvc

我正在尝试将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",
    ...
}

0 个答案:

没有答案