gpt4 book ai didi

java - 一起使用@RequestBody 和@ModelAttribute?

转载 作者:搜寻专家 更新时间:2023-10-31 19:49:48 25 4
gpt4 key购买 nike

我正在尝试获取 POST 的主体,我希望我的方法的参数绑定(bind)到一个对象。

这可能吗?

我当前的声明从未被击中:

 @RequestMapping(method = RequestMethod.POST)
public void doStuff(@RequestBody byte[] bodyData, @ModelAttribute Form form, Model model ) {

看起来我遇到了这个异常:

- 2011-02-25 16:57:30,354 - ERROR - http-8080-3 - org.springframework.web.portle
t.DispatcherPortlet - Could not complete request
java.lang.UnsupportedOperationException: @RequestBody not supported

最佳答案

要使其正常工作,您必须确保使用的是 AnnotationMethodHandlerAdapter .这会覆盖 HandlerMethodInvoker's createHttpInputMessage (这是抛出你看到的异常)。 (它在私有(private)类(class)中执行此操作。)

我相信您可以在 *-servlet.xml 中包含以下内容

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>

警告:以下答案适用于在同一处理程序方法中需要@RequestBody 和@RequestParam 的情况。它没有回答这个问题,但可能对某人有用。

我已经使用 Spring 3.0.1 对此进行了测试。这是可能的,但它有点不稳定。你必须在你的@RequestParam 参数之前有你的@RequestBody 方法参数。我猜这是因为 HandlerMethodInvoker检索参数时读取请求体(连同 GET 参数)(并且请求体只能读取一次)。

这是一个例子(警告:我用 Scala 编写代码,所以我没有编译这段 Java 代码)

@RequestMapping(value = "/test", method = RequestMethod.POST)
public String test(
@RequestBody String body,
@RequestParam("param1") String parma1,
Map<Object, Object> model: Map[AnyRef, AnyRef])
{
model.put("test", test)
model.put("body", body)

return "Layout"
}

另一种方法是使用@PathVariable。我已经确认这有效。

关于java - 一起使用@RequestBody 和@ModelAttribute?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5120169/

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