使用 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
类中有getters
和setters
...
然后,您需要将 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 中的操作方法参数中?