1. Spring 项目中 REST的关键原则之一就是“使用标准接口”(the use of the Uniform Interface),也就是提倡根据不同的语义使用GET, PUT, POST和DELETE方法,而html的form标签只支持两种提交方法:POST和GET,所以,为了使用PUT和DELETE方法,可以在web.xml中配置一个过滤器:
在SpringMVC中配置HiddenHttpMethodFilter
1 2 3 4 5 6 7 8 9 <filter > <filter-name > httpMethodFilter</filter-name > <filter-class > org.springframework.web.filter.HiddenHttpMethodFilter</filter-class > </filter > <filter-mapping > <filter-name > httpMethodFilter</filter-name > <servlet-name > petclinic</servlet-name > </filter-mapping >
1 值得一提的是:这个过滤器是一个普通的过滤器,也就是说,它可以和任何Java框架一起使用,而不仅仅是Spring MVC
如果你使用的是spring提供的form标签,那么像下面这样写就好了:
1 2 3 <form:form method ="delete" > <p class ="submit" > <input type ="submit" value ="Delete Pet" /> </p > </form:form >
如果你使用的是普通的html标签,或者其它标签,那么要将method值设置为POST,然后再form里添加一个_method隐藏域,如下:
1 2 3 4 <form method ="post" > <input type ="hidden" name ="_method" value ="delete" /> <p class ="submit" > <input type ="submit" value ="Delete Pet" /> </p > </form >
2.springBoot 项目中 SpringBoot自动配置好的,如下自动配置WebMvcAutoConfiguration类中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 @Configuration @ConditionalOnWebApplication @ConditionalOnClass ({Servlet.class , DispatcherServlet .class , WebMvcConfigurerAdapter .class }) @ConditionalOnMissingBean ( {WebMvcConfigurationSupport.class }) @AutoConfigureOrder (-2147483638) @AutoConfigureAfter ( {DispatcherServletAutoConfiguration.class , ValidationAutoConfiguration .class }) public class WebMvcAutoConfiguration { public static final String DEFAULT_PREFIX = "" ; public static final String DEFAULT_SUFFIX = "" ; public WebMvcAutoConfiguration () { } @Bean @ConditionalOnMissingBean ({HiddenHttpMethodFilter.class }) public OrderedHiddenHttpMethodFilter hiddenHttpMethodFilter () { return new OrderedHiddenHttpMethodFilter(); } ......
在页面中可以直接使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 <form th:action ="@{/emp}" method ="post" > <input type ="hidden" name ="_method" value ="put" th:if ="${emp!=null}" /> <input type ="hidden" name ="id" th:if ="${emp!=null}" th:value ="${emp.id}" > <div class ="form-group" > <label > LastName</label > <input name ="lastName" type ="text" class ="form-control" placeholder ="zhangsan" th:value ="${emp!=null}?${emp.lastName}" > </div > <div class ="form-group" > <label > Email</label > <input name ="email" type ="email" class ="form-control" placeholder ="zhangsan@atguigu.com" th:value ="${emp!=null}?${emp.email}" > </div > <div class ="form-group" > <label > Gender</label > <br /> <div class ="form-check form-check-inline" > <input class ="form-check-input" type ="radio" name ="gender" value ="1" th:checked ="${emp!=null}?${emp.gender==1}" > <label class ="form-check-label" > 男</label > </div > <div class ="form-check form-check-inline" > <input class ="form-check-input" type ="radio" name ="gender" value ="0" th:checked ="${emp!=null}?${emp.gender==0}" > <label class ="form-check-label" > 女</label > </div > </div > <div class ="form-group" > <label > department</label > <select class ="form-control" name ="department.id" > <option th:selected ="${emp!=null}?${dept.id == emp.department.id}" th:value ="${dept.id}" th:each ="dept:${depts}" th:text ="${dept.departmentName}" > 1</option > </select > </div > <div class ="form-group" > <label > Birth</label > <input name ="birth" type ="text" class ="form-control" placeholder ="zhangsan" th:value ="${emp!=null}?${#dates.format(emp.birth, 'yyyy-MM-dd HH:mm')}" > </div > <button type ="submit" class ="btn btn-primary" th:text ="${emp!=null}?'修改':'添加'" > 添加</button > </form >
欢迎访问 chenyawei 的博客, 若有问题或者有好的建议欢迎留言,笔者看到之后会及时回复。 评论点赞需要github账号登录,如果没有账号的话请点击 github 注册, 谢谢 !
If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !