gpt4 book ai didi

spring - 如何使用 Spring MVC 测试来测试表单提交?

转载 作者:行者123 更新时间:2023-12-04 18:21:04 24 4
gpt4 key购买 nike

我使用 Spring 创建 Controller 的大部分经验都是针对使用 JSON 格式请求的 REST Controller 。我一直在寻找有关如何测试表单提交的文档,到目前为止,这就是我理解应该使用 MockMvc 的方式:

MvcResult result = mockMvc.perform(post("/submit")
.param('title', 'test title')
.param('description', 'test description'))
.andReturn()

但是,我不确定如何将表单参数映射到模型对象。我已经在搜索中看到了 @ModelAttribute 注释,但我不知道如何将它用于映射。另外,this quick start guide官方文档中没有详细说明 th:objectth:field 等内容如何转换为 HTML,然后转换为 URL 编码形式。

我的 Controller 代码类似于以下内容:

@PostMapping('/submit')
def submit(@ModelAttribute WriteUp writeUp) {
//do something with writeUp object
'result'
}

最佳答案

通过反复试验,我发现我的具体问题可能是 Groovy 特有的。事实证明,测试代码和 Controller 代码没有问题。重申一下,要测试表单提交,请通过 MockMvcRequestBuildersperform 方法使用 param 方法。另一件需要注意的事情是,如果未指定内容类型,这似乎不起作用。这是适合我的示例测试代码:

MvcResult result = webApp.perform(post("/submit")
.contentType(APPLICATION_FORM_URLENCODED) //from MediaType
.param('title', 'test title')
.param('description', 'test description'))
.andReturn()

正如你所看到的,它与我最初发布的内容没有太大不同。 Controller 代码几乎相同,@ModelAttribute 工作得很好。

我的设置的问题是,自从我使用 Groovy 以来,我假设 getter 和 setter 是在我的 WriteUp 类中自动生成的。下面是 WriteUp 类最初的样子:

class WriteUp {
private String title
private String description
}

我已经有一段时间没有在 Groovy 中编写代码了,上次我这样做时,可以假定像上面这样的类隐式具有 getter 和 setter。然而,事实证明并非如此。 为了解决我的具体问题,我将字段中的访问修饰符更新为默认(包级别):

class WriteUp {
String title
String description
}

关于spring - 如何使用 Spring MVC 测试来测试表单提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40820745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com