Post Java Spring 中的方法和字符串值
Post method and String value in Java Spring
我正在尝试 post 来自 home.html 模板的文本
<form th:action="@{/process_addText}" th:object="${textzz}" method="post" >
<input type="text" th:field="*{text}" />
<button type="submit" class="btn btn-info">Add</button>
</form>
这是我的控制器
@PostMapping("/process_addText")
public String processAddText(Text text1) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String name = auth.getName();
User myUser=userRepo.findByEmail(name);
text1.setUser(myUser);
textRepo.save(text1);
return "redirect:/home";
}
@GetMapping("/home")
public String mySuccess(Model model) {
model.addAttribute("textzz",new Text());
LOGGER.info("verif==="+model.toString());
return "home";
}
这是我的文字 class:
@Entity
@Table(name = "texts")
public class Text {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long idText;
@OneToOne
@JoinColumn(name = "id", referencedColumnName = "id")
private User user;
private String text;
}
当我尝试 post 来自 home.html 的“文本”值时,出现此错误:
WARN 680 --- [nio-8088-exec-7]
.w.s.m.s.DefaultHandlerExceptionResolver : Resolved
[org.springframework.beans.TypeMismatchException: Failed to convert
value of type 'java.lang.String' to required type
'com.myblog.app.model.Text'; nested exception is
org.springframework.core.convert.ConversionFailedException: Failed to
convert from type [java.lang.String] to type [java.lang.Long] for
value 'qvefd'; nested exception is java.lang.NumberFormatException:
For input string: "qvefd"]
我不知道为什么会收到这个,因为类型是正确的
更新:当我删除输入并在我的数据库中 post(无文本)时,我得到正确的行(对于文本 ID 和用户的外键),当然文本值 = NULL。所以问题可能出在输入类型上。
您的控制器方法接受 Text
实体,但您的前端表单发送 post 请求,在请求正文中仅发送一个简单的 String
。
然后 Spring 无法将 String
转换为 Text
对象。
所以你的控制器方法应该是
@PostMapping("/process_addText")
public String processAddText(String text) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String name = auth.getName();
User myUser=userRepo.findByEmail(name);
Text text1 = textRepo.findByUser(myUser);
if (text1 == null){
text1 = new Text();
text1.setUser(myUser);
}
text1.setText(text);
textRepo.save(text1);
return "redirect:/home";
}
我正在尝试 post 来自 home.html 模板的文本
<form th:action="@{/process_addText}" th:object="${textzz}" method="post" >
<input type="text" th:field="*{text}" />
<button type="submit" class="btn btn-info">Add</button>
</form>
这是我的控制器
@PostMapping("/process_addText")
public String processAddText(Text text1) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String name = auth.getName();
User myUser=userRepo.findByEmail(name);
text1.setUser(myUser);
textRepo.save(text1);
return "redirect:/home";
}
@GetMapping("/home")
public String mySuccess(Model model) {
model.addAttribute("textzz",new Text());
LOGGER.info("verif==="+model.toString());
return "home";
}
这是我的文字 class:
@Entity
@Table(name = "texts")
public class Text {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long idText;
@OneToOne
@JoinColumn(name = "id", referencedColumnName = "id")
private User user;
private String text;
}
当我尝试 post 来自 home.html 的“文本”值时,出现此错误:
WARN 680 --- [nio-8088-exec-7] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'com.myblog.app.model.Text'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.lang.Long] for value 'qvefd'; nested exception is java.lang.NumberFormatException: For input string: "qvefd"]
我不知道为什么会收到这个,因为类型是正确的
更新:当我删除输入并在我的数据库中 post(无文本)时,我得到正确的行(对于文本 ID 和用户的外键),当然文本值 = NULL。所以问题可能出在输入类型上。
您的控制器方法接受 Text
实体,但您的前端表单发送 post 请求,在请求正文中仅发送一个简单的 String
。
然后 Spring 无法将 String
转换为 Text
对象。
所以你的控制器方法应该是
@PostMapping("/process_addText")
public String processAddText(String text) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String name = auth.getName();
User myUser=userRepo.findByEmail(name);
Text text1 = textRepo.findByUser(myUser);
if (text1 == null){
text1 = new Text();
text1.setUser(myUser);
}
text1.setText(text);
textRepo.save(text1);
return "redirect:/home";
}