Spring MVC 和 Thymeleaf 自定义错误消息类型转换

Posted

技术标签:

【中文标题】Spring MVC 和 Thymeleaf 自定义错误消息类型转换【英文标题】:Spring MVC and Thymeleaf custom error message type conversion 【发布时间】:2016-11-27 21:35:05 【问题描述】:

我有一个实体如下:

@Entity
public class MyEntity 

    @Column(name = "id")
    @Id @GeneratedValue
    private Long id;
    private int SiteId;
   //...getters & setters etc..

@Controller 中的一个方法:

@RequestMapping(value = "/edit", method = RequestMethod.POST)
    public String edit(@Valid @ModelAttribute("myEntity") MyEntity myEntity, BindingResult result) 

        if (result.hasErrors())  
            return "edit"; 
         
        myEntityRepository.save(myEntity);
        return "redirect:/home"; 
    

在我的 edit.html 文件中:

<form name="form"  th:action="@/edit" th:object="$myEntity" method="post">
    <div class="form-group col-sm-3">
        <label class="control-label" for="siteId">Site ID</label>
        <input class="form-control" type="text" th:field="*siteId"/>
        <p th:if="$#fields.hasErrors('siteId')" 
        class="label label-danger" th:errors="*siteId">My custom error message</p>
    </div>
    <div class="form-group">
        <input type="submit" value="Confirme" class="btn btn-primary" />
    </div>
</form>

我的 siteId 字段下显示此消息:Failed to convert property value of type [java.lang.String] to required type [int] for property sectorId; nested exception is java.lang.NumberFormatException: For input string: "random string" 而不是我要显示的消息,即My custom error message

【问题讨论】:

【参考方案1】:

如果您在转换失败的情况下查看您的BindingResult result,您会看到:

BindingResult.errors[0].codes = [
    0 = "typeMismatch.myEntity.sectorId"
    1 = "typeMismatch.sectorId"
    2 = "typeMismatch.int"
    3 = "typeMismatch"
]

也就是说,如果您想更改错误消息,您需要转到带有消息的本地化文件(例如messages.properties)并在那里设置错误消息:

typeMismatch.myEntity.sectorId = Sector must be a number

或一般用于任何int

typeMismatch.int = Must be a number

有关 Spring MVC 中消息本地化的更多信息,请参阅https://www.baeldung.com/spring-custom-validation-message-source。

【讨论】:

【参考方案2】:

尝试添加这个:

typeMismatch.classNameWrittenLikeThat.fieldName = custom text to show as error

致您的messages.properties

【讨论】:

messages.properties(或您配置为消息包的任何内容),而不是 application.properties

以上是关于Spring MVC 和 Thymeleaf 自定义错误消息类型转换的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC 和 Thymeleaf 资源版本控制

Thymeleaf (Java Spring):无法让 mvc.uri 工作

Spring MVC 和 Thymeleaf 自定义错误消息类型转换

Thymeleaf 和 Spring MVC 电流控制器和动作

Spring MVC、Tiles2、ThymeLeaf 和自然模板

Spring MVC thymeleaf 随机崩溃