#java #html #spring #thymeleaf
#java #HTML #spring #thymeleaf
Вопрос:
Я новичок в Spring и Thymeleaf, и я не знаю, что здесь пошло не так. При отправке моей формы я получаю THIS
сообщение об ошибке:
There was an unexpected error (type=Bad Request, status=400). Failed to convert value of type 'java.lang.String' to required type 'br.com.teste.segware.domain.post.Post'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.lang.Integer] for value 'Some text...'; nested exception is java.lang.NumberFormatException: For input string: "Sometext..." org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'br.com.teste.segware.domain.post.Post'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.lang.Integer] for value 'Some text...'; nested exception is java.lang.NumberFormatException: For input string: "Sometext..."
Вот мой Post
класс: (Я использую Lombok, поэтому геттеры и сеттеры генерируются самостоятельно)
@Getter
@Setter
@Entity
@Table(name = "post")
public class Post implements Serializable {
@EqualsAndHashCode.Include
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
private Integer id;
@NotBlank
@Column(nullable = false)
private String nome;
@NotBlank
@Size(max = 800)
@Column(nullable = false)
private String post;
}
Мой контроллер:
@Controller
public class IndexController {
@Autowired
private PostService postService;
@PostMapping("/savePost")
String savePost(@ModelAttribute("post") Post post) {
postService.savePost(post);
return "redirect:/";
}
}
И моя HTML-форма:
<form method="post" th:object="${post}" th:action="@{/savePost}">
<fieldset>
<input type="hidden" th:field="*{id}" />
<label for="name">Nome:</label> <br/>
<input type="text" id="name" name="name" th:field="*{nome}" placeholder="Nome..." /> <br/><br/>
<label for="post">O que você gostaria de dizer?</label> <br/>
<textarea id="post" name="post" th:field="*{post}" ></textarea> <br/><br/>
<input type="submit" value="Postar" />
</fieldset>
</form>
Почему эта штука пытается преобразовать <textarea>
from String
в какое-то число с NumberFormat
помощью stuff?
Entity
Named Post
четко объявляет поле post
как String
. Итак, почему Spring считает, что это какое-то число при отправке? Очевидно, что когда я ввожу некоторые числа textarea
, они сохраняются в базе данных. Но меня нужно String
сохранить…
Кто-нибудь, пожалуйста, просветите меня.
Заранее спасибо!
Редактировать
Вот репозиторий И класс обслуживания, просто чтобы быть уверенным.
Обслуживание…
@Service
public class PostService {
@Autowired
private PostRepository postRepository;
public void savePost(Post post) {
postRepository.save(post);
}
}
Репозиторий…
public interface PostRepository extends JpaRepository<Post, Integer> {
}
Комментарии:
1. Есть ли у вас какой-либо другой объект домена Post в вашей настройке или объект Post доступен напрямую в контроллере / странице? Не могли бы вы также опубликовать класс репозитория?
2. Привет, спасибо за ответ! Я отредактировал вопрос со всем кодом, который у меня есть до сих пор.
Ответ №1:
Похоже, что существует коллизия имен, поскольку имя объекта и имя переменной одинаковы (в вашем случае post).
Либо измените имя столбца в классе сущностей на другое, чем post, а затем измените в html. Или измените имя резервного объекта в контроллере и html на что-то другое, кроме post. Оба работают для меня.
Комментарии:
1. Вот и все! Я изменил на имя столбца, а затем в HTML. Я думаю, что я использовал слишком много слов «post»! Большое вам спасибо!