I18n для пользовательских сообщений об ошибках в объекте JPA - PullRequest
1 голос
/ 07 января 2020

Я хочу понять, как интернационализировать сообщение об ошибке сущности JPA. Я понимаю, как это работает в контроллере с использованием автоматического проводного MessageSource, но в моем случае я хочу сделать это в сущности JPA. Я не интересуюсь тем же способом, что и проблема с контроллером, потому что, по-моему, не оптимизирована для автоматического подключения полного MessageSource к этой сущности. Если у кого-то есть простой пример, чтобы показать мне, как это работает с простой сущностью, такой как моя. Мой проект использует spring-boot 2.2; JPA; и тимелист.

Сущность, которую я использую:

package com.bananasplit.weblab2.entities;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

@Entity
@Table(name = "todo")
public class Todo {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    @Column(name = "name", nullable = false)
    @NotEmpty
    @Size(min=2, max=30) // error message is already internationalized here with spring-boot
    private String name;

    @Column(name = "category", nullable = false)
    @NotEmpty
    @Pattern(regexp="(WORK|PERSONAL|SPECIAL)",
        message="Category must be WORK or PERSONNAL or SPECIAL.") // here is the message I want to internationalize
    private String category;


    public Todo() {}

    public Todo(String name, String category) {
        this.name = name;
        this.category = category;
    }

    @Override
    public String toString() {
        return String.format(
            "Todo[id=%d, name='%s', category='%s']",
            id, name, category);
    }

    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }
}

1 Ответ

2 голосов
/ 07 января 2020

По умолчанию Spring boot использует это ValidationMessages.properties, но вы можете переопределить, добавив этот файл в ресурсы.

@Size(min=2, max=30, message="{empty.todo.name") 
private String name;

В ValidationMessages.properties файле

 empty.todo.name = Cannot be blank

Если вы хотите решить, какие сообщения пакета должны быть проверены Spring, затем следует перейти по этой ссылке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...