使用 POST 方法从 URL 中提取参数

Posted

技术标签:

【中文标题】使用 POST 方法从 URL 中提取参数【英文标题】:Extracting parameters from URL with POST method 【发布时间】:2015-06-13 02:27:55 【问题描述】:

我有这样的事情:

@RestController
@RequestMapping("/prop")
public class PropController 

@RequestMapping(method = RequestMethod.POST)
public Prop getProp(@ModelAttribute PropForm propForm) 
   //calling methods and stuff using propForm


我的 PropForm 类:

@Data
public class PropForm 
            private  String att1; 
            private  String att2; 
            private  String att3;

现在我调用这个网址:

http://localhost:8080/prop?att1=blabla&att2=blob&att3=test

我想从 URL 中提取参数并将它们放在我的 propForm 中。

我尝试将@ModelAttribute 替换为@RequestBody,然后再替换为@RequestParam。它仍然无法正常工作,我在运行应用程序时总是得到NullPointerException

请注意,我需要使用 POST 方法。我已经使用 GET 方法让它工作了

【问题讨论】:

我想你可以试试这样的@QueryParam("att1") String att1 你怎么称呼它,这个NullPointerException的详细信息是什么? 【参考方案1】:

FIRST确保您的PropForm 类中有getterssetters...

然后,您需要将 Form 实体放入模型中:

model.put("NAME", propForm);

并像这样声明方法:

@RequestMapping(method = RequestMethod.POST)
public Prop getProp(
    @ModelAttribute PropForm propForm
    @Valid @ModelAttribute("NAME") PropForm propForm) 
    //                     ^ you're missing the name!

     // do your stuff....


    return (Prop) propForm;

【讨论】:

我还没有视图。我想使用我的 PropForm 类而不是单个属性,因为 att1、att2 和 att3 只是示例,属性列表很长 必须要有视图吗?我只有网址,所以我真的不知道该在名称中输入什么 模型是什么意思? Check this link 感谢您提供的链接,但显然这是不可能的。谢谢你的时间。【参考方案2】:

我认为你的控制器和映射没问题。 但问题是您期待映射中的发布请求,而您正在调用 http://localhost:8080/prop?att1=blabla&att2=blob&att3=test

现在这将生成一个GET请求Not Post。您不能仅使用 url 发送发布请求。

如果您不能使用表单发送请求,那么您需要使用任何第 3 方来生成 POST 请求 喜欢你可以使用jquery $.post()

而且att1 att2 也无济于事,除非您将对象与模型属性绑定。

【讨论】:

确实,显然这是不可能的。感谢您解释原因。

以上是关于使用 POST 方法从 URL 中提取参数的主要内容,如果未能解决你的问题,请参考以下文章

java HttpUrlConnection的post()方法的参数没有加在url的后边

是否可以将 & 分隔的无密钥 url 参数提取到 .NET Core 中的操作方法参数中?

Flask关于Flask的request属性

重定向到`Java`中的get方法时如何从url中删除参数[重复]

我想用 URL POST 方法在字典参数中传递数组

使用 URL 参数的 JSF 托管 Bean 方法调用