我的RequestController:
@Controller
@RequestMapping("/request")
public class RequestsController {
private static final Logger log = LoggerFactory.getLogger(TmtApplication.class);
@Autowired
RequestRepository requestRepository;
@Autowired
UsersRepository usersRepository;
@RequestMapping("/save")
String saveRequest()
{
Request requestObj = new Request(usersRepository.findOne(1L), new Date());
requestObj.setDescription("I got so bored");
requestObj.setStatus(false);
requestObj.setRequestDate(new Date());
requestRepository.save(requestObj);
return "index";
}
}
我的按钮:
<input type="submit" value="Submit Request" style="display: block;">
我正试图让我的按钮触发此请求。我应该添加什么来启动对/ save的调用?
更新
形式:
<form action="/request/save" method="post" commandName="requestData">
<input type="text" id="dateInput" value="" style="display: none;"/>
<div style="width: 200px;"><input type="submit" value="Submit Request" style="display: block;">
</div>
</form>
控制器:
@RequestMapping(value = "/save", method = RequestMethod.POST)
String saveRequest(@ModelAttribute("requestData") Request requestData, Map<String, Object> map,
HttpServletRequest request)
{
Request requestObj = new Request(usersRepository.findOne(1L), new Date());
requestObj.setDescription(requestData.getDescription());
requestObj.setStatus(false);
requestObj.setRequestDate(requestData.getRequestDate());
requestRepository.save(requestObj);
return "save";
}
答案 0 :(得分:1)
要使用弹簧代码实现此功能,您必须使用表单环绕标记。
<form action="save">
<input type="submit" value="Submit Request" style="display: block;">
</form>
此外,您必须从正确的URL调用此方法才能使其正常工作。表单操作可以相对于您所在的页面,也可以相对于URL的根目录。
您可以通过两种方式点击RequestMapping,该选项可解析为:
/request/save
一个是使用相对行动。您必须在此网址上提供HTML:
{server:port}/request
然后你的行动应该是:
"save"
第二个选项是使用表单操作的绝对路径:
"/request/save"
哪个适用于您在此服务器上提供HTML的位置。
摘要
您需要提交一些内容(表单),并告诉它在哪里提交(操作)。因此,您需要同步您的网址,表单和提交端点。
此外,最好在RequestMapping上指定请求方法,以便您可以单独处理POST / GET。根据{{3}},默认行为是映射所有HTTP方法:
以上示例未指定GET与PUT,POST等, 因为@RequestMapping默认映射所有HTTP方法。
为表单提交指定POST是个好主意。
@RequestMapping(value = "/save", method = RequestMethod.POST)
这是你应该去的方向,因为表单提交应该是一个POST动作,以便表单的内容进入请求体,最终你会希望它从你的表单中获取POST的字段,并将它们映射到Controller类中的对象。
一些提示:
考虑使用像Thymeleaf这样的模板引擎(春天经常在他们的教程中使用)或JSP + taglib。 Thymeleaf的重量更轻一些,如果你使用它,你可以像Spring一样编写很多例子来做事。有关示例,请参阅本教程:
或者,如果某人只是尝试测试请求映射,或者您只是想验证您的MVC端点是否按照您的想法进行操作,那么使用Spring Boot: Handling Form Submission之类的工具会更简单(我非常推荐)提交您的请求。这将为您带来一些变量,因此您可以专注于您正在尝试开发的内容(REST API?),而不是测试设置。