使用 POST 方法从 URL 中提取参数
Extracting parameters from URL with POST method
我有这样的东西:
@RestController
@RequestMapping("/prop")
public class PropController {
@RequestMapping(method = RequestMethod.POST)
public Prop getProp(@ModelAttribute PropForm propForm) {
//calling methods and stuff using propForm
}
}
我的 PropForm class :
@Data
public class PropForm {
private String att1;
private String att2;
private String att3;
}
现在我称这个 URL :
http://localhost:8080/prop?att1=blabla&att2=blob&att3=test
我想从 URL 中提取参数并将它们放入我的 propForm 中。
我试过将 @ModelAttribute
替换为 @RequestBody
,然后再替换为 @RequestParam
。它仍然无法正常工作,我总是在 运行 应用程序时得到 NullPointerException
。
请注意,我需要使用 POST 方法。我已经使用 GET 方法让它工作
FIRST 确保 getters
和 setters
在 PropForm
class...
然后,您需要将表单实体放入您的模型中:
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;
}
我觉得你的控制器和映射没问题。
但问题是您在映射中期待 post 请求,并且您正在调用
http://localhost:8080/prop?att1=blabla&att2=blob&att3=test
现在这将生成一个 GET 请求 而不是 Post。您不能仅使用 url.
发送 post 请求
如果您不能使用表单发送请求,那么您需要使用任何第 3 方来生成 POST 请求
就像你可以使用 jquery $.post()
而且 att1
att2
也无济于事,除非您将对象与模型属性绑定。
我有这样的东西:
@RestController
@RequestMapping("/prop")
public class PropController {
@RequestMapping(method = RequestMethod.POST)
public Prop getProp(@ModelAttribute PropForm propForm) {
//calling methods and stuff using propForm
}
}
我的 PropForm class :
@Data
public class PropForm {
private String att1;
private String att2;
private String att3;
}
现在我称这个 URL :
http://localhost:8080/prop?att1=blabla&att2=blob&att3=test
我想从 URL 中提取参数并将它们放入我的 propForm 中。
我试过将 @ModelAttribute
替换为 @RequestBody
,然后再替换为 @RequestParam
。它仍然无法正常工作,我总是在 运行 应用程序时得到 NullPointerException
。
请注意,我需要使用 POST 方法。我已经使用 GET 方法让它工作
FIRST 确保 getters
和 setters
在 PropForm
class...
然后,您需要将表单实体放入您的模型中:
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;
}
我觉得你的控制器和映射没问题。
但问题是您在映射中期待 post 请求,并且您正在调用
http://localhost:8080/prop?att1=blabla&att2=blob&att3=test
现在这将生成一个 GET 请求 而不是 Post。您不能仅使用 url.
发送 post 请求如果您不能使用表单发送请求,那么您需要使用任何第 3 方来生成 POST 请求
就像你可以使用 jquery $.post()
而且 att1
att2
也无济于事,除非您将对象与模型属性绑定。