亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Spring JPAF無法將類型 [java.lang.String] 轉換為類型

Spring JPAF無法將類型 [java.lang.String] 轉換為類型

陪伴而非守候 2021-11-17 10:21:57
我不明白為什么當我嘗試在 spring 中使用 modelAttributed 表單時,它試圖將我的 String 類型變量轉換為 Long 類型變量,而它應該只保留 String 類型。我懷疑它試圖做的唯一一件事就是填充 Id 變量。無法將“java.lang.String”類型的值轉換為所需類型“javaSpring.DojoOverflow.models.Questions”;嵌套異常是 org.springframework.core.convert.ConversionFailedException:無法從類型 [java.lang.String] 轉換為類型 [java.lang.Long] 的值“為什么?”;嵌套異常是 java.lang.NumberFormatException: For input string: "Why?"//---------------------------------------------------// My Model@Entity@Table(name="questions")public class Questions {    // Attributes    @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    private Long id;    @NotEmpty(message = "Ask a question!")    private String question;    @Column(updatable=false)    private Date createdAt;    private Date updatedAt;    @OneToMany(mappedBy="question", fetch = FetchType.LAZY)    private List<Answer> answers;    @ManyToMany(fetch = FetchType.LAZY)    @JoinTable (       name="questions_tags",       joinColumns = @JoinColumn(name="question_id"),       inverseJoinColumns = @JoinColumn(name="tag_id")      )    @Size (max=3)    @NotEmpty(message="Tag your question!")    private List<Tag> tags;// ------------------------------------- // My Controller Mapping@PostMapping("/questions/new")public String processQuestion(@Valid @ModelAttribute("question")Questions   question, BindingResult result) {    if(result.hasErrors()) {        return "newQuestion.jsp";    }    questionService.createQuestion(question);    return "redirect:/";}//-----------------------------------------------// My jsp<body><div class="container"><h1>What is your question?</h1><form:form action="/questions/new" method="post" modelAttribute="question">    <div class="form-group">                <form:label path="question">Question</form:label>        <form:textarea rows="5" class="question form-control" path="question"/>        <span class="error"><form:errors path="question"/></span>    </div></form:form><a href="/questions">Go Back</a></div></body> 
查看完整描述

2 回答

?
料青山看我應如是

TA貢獻1772條經驗 獲得超8個贊

看起來像一個未完全初始化的對象。檢查您的 createQuestion 服務方法,并確保在將問題傳遞給控制器之前設置了問題的每個必填字段。僅該表單并沒有所有必要的字段。


查看完整回答
反對 回復 2021-11-17
?
慕斯709654

TA貢獻1840條經驗 獲得超5個贊

我建議應用 MVVC 模式將您的業務對象與您的視圖對象分開。


您希望僅從模型屬性對象中的視圖接收字符串。


您的實體對象包含標簽列表和答案列表 => 它們的建模方式不同,同一類的使用很困難,并且存在許多潛在的錯誤。


在您的情況下,最好僅使用字符串創建一個單獨的視圖類并將它們轉換為您的實體對象。


例子 :


public class QuestionModelAttribute {

       private String tags;

       private String answers;

       .....

 }

并且您的方法將收到:


@PostMapping("/questions/new")

public String processQuestion(@Valid @ModelAttribute("question") QuestionModelAttribute questionModelAttribute, BindingResult result) {

   Questions question = questionsService.convertQuestion(questionModelAttribute);

   questionService.save(question);

   ..

}

您的視圖將在模型中收到一個 QuestionModelAttribute


<form:form action="/questions/new" method="post" modelAttribute="questionModelAttribute">

這種模式在視圖和模型之間提供了健康的解耦。


查看完整回答
反對 回復 2021-11-17
  • 2 回答
  • 0 關注
  • 358 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號