【发布时间】:2021-09-24 11:44:51
【问题描述】:
我的应用程序出现问题。我创建了表单,单击“保存”后的用户应该转到保存的活动列表,不幸的是它没有,我得到以下问题,HTTP 状态 400 – 错误请求 输入状态报告
描述由于被认为是客户端错误(例如,格式错误的请求语法、无效的请求消息帧或欺骗性请求路由),服务器无法或不会处理请求。
Apache Tomcat/9.0.37
我试过@RestController 但它不起作用。非常感谢您的帮助
这是我的模块类 Clean
@ToString
@Entity
@Table(name = "clean")
public class Clean {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank
private String clean;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getClean() {
return clean;
}
public void setClean(String clean) {
this.clean = clean;
}
}
表单控制器
@Controller
public class CleanFormController {
private final UserRepository userRepository;
private final CleanRepository cleanRepository;
private final WeekRepository weekRepository;
public CleanFormController(UserRepository userRepository, CleanRepository cleanRepository, WeekRepository weekRepository) {
this.userRepository = userRepository;
this.cleanRepository = cleanRepository;
this.weekRepository = weekRepository;
}
@RequestMapping(value = "/clean/form")
public String getCleanForm(Model model) {
Clean clean = new Clean();
model.addAttribute("clean", clean);
return "cleanForm";
}
@RequestMapping(value = "/clean/remove/{id}")
public String deleteById(@PathVariable Long id) {
cleanRepository.removeClean(id);
return "redirect:/clean/list";
}
@RequestMapping(value = "/clean/form", method = RequestMethod.POST)
public String postClean(@ModelAttribute @Valid Clean clean, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "cleanForm";
}
cleanRepository.saveClean(clean);
return "redirect:/clean/list";
}
@RequestMapping(value = "/clean/list", method = RequestMethod.GET)
public String allClean(Model model) {
List<Clean> cleanList = cleanRepository.findAll();
model.addAttribute("cleans", cleanList);
return "cleanList";
}
}
存储库
public class CleanRepository {
@PersistenceContext
EntityManager entityManager;
public Clean saveClean(Clean clean) {
if (clean.getId() == null) {
entityManager.persist(clean);
} else {
entityManager.merge(clean);
}
return clean;
}
public Clean readClean(Long id){
return entityManager.find(Clean.class, id);
}
public Clean updateClean (Clean clean){
entityManager.merge(clean);
return clean;
}
public void removeClean(Long id) {
Clean clean = entityManager.find(Clean.class, id);
entityManager.remove(entityManager.contains(clean) ? clean : entityManager.merge(clean));
}
public List<Clean> findAll() {
Query query = entityManager.createQuery("Select t from Clean t");
return query.getResultList();
}
public Clean findById(Long id) {
return entityManager.find(Clean.class, id);
}
}
控制器
@Transactional
@Controller
public class CleanController {
private final CleanRepository cleanRepository;
public CleanController(CleanRepository cleanRepository) {
this.cleanRepository = cleanRepository;
}
@RequestMapping(value = {"/add/clean"})
@ResponseBody
public String home() {
Clean clean = new Clean();
clean.setId(1l);
clean.setClean("Ironing");
cleanRepository.saveClean(clean);
return "Clean: " + clean.getId();
}
@RequestMapping(value = "/clean/read/{id}")
@ResponseBody
public String readClean(@PathVariable long id) {
Clean clean = cleanRepository.findById(id);
return clean.toString();
}
@RequestMapping(value = "/clean/update/{id}/{name}")
@ResponseBody
public String updateClean(@PathVariable long id, @PathVariable String name) {
Clean clean = cleanRepository.findById(id);
clean.setClean(name);
cleanRepository.updateClean(clean);
return clean.toString();
}
@RequestMapping(value = "/clean/delete/{id}")
@ResponseBody
public String removeClean(@PathVariable long id) {
Clean clean = cleanRepository.findById(id);
return "Removed this clean";
}
@RequestMapping(value = {"/clean/all"})
@ResponseBody
public String cleanAll () {
List<Clean> all = cleanRepository.findAll();
return "Cleans: " + all.size();
}
}
干净的表格
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<style>
error {
background-color: red;
}
</style>
<body>
<form:form method="post" modelAttribute="clean" action="/clean/form">
<p hidden><form:input path="id"/></p>
<label for="clean">Clean</label>
<form:input path="clean" id="clean"/>
<form:errors path="clean" cssClass="error"/>
<br>
<input type="submit" value="Save">
</form:form>
</body>
</html>
清理列表
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<table>
<th>Id</th>
<th>Clean</th>
<c:forEach items="${cleans}" var="clean">
<tr>
<td>${clean.id}</td>
<td>${clean.clean}</td>
</tr>
</c:forEach>
</table>
<a href="form">Add cleans</a>
</html>
【问题讨论】:
-
@DanyalSandeelo 这是一种风格改进,这里可以做很多事情,但这不是问题的原因。 OP,请注意,您似乎在这里使用过时的教程和设计;我推荐阅读官方的 Spring Boot 入门指南。
标签: java spring model-view-controller