Spring / Thymeleaf — не удалось преобразовать значение типа ‘java.lang.lang.Строка’ в требуемый тип

#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»! Большое вам спасибо!