Vraag Javax validatie foutmelding specifieker maken


Sorry als deze vraag ergens eerder is behandeld. Als het mij hiernaar heeft verwezen, heb ik tot nu toe geen bevredigend antwoord kunnen vinden.

Ik heb rondgekeken om een ​​manier te vinden om de foutenmeldingen te krijgen die door mijn javaxbevestiging worden verstrekt specifieker.

Het bericht dat ik momenteel heb voor mijn @Min-annotatie, wordt opgegeven in het bestand ValidationMessages.properties:

javax.validation.constraints.Min.message=The value of this variable must be less than {value}.

en dit wordt afgedrukt zoals zou worden verwacht

The value of this variable must be less than 1

Wat ik zou willen hebben is dat het bericht ook de naam van de variabele (en klasse) bevat die niet geslaagd is voor de validatie, evenals de waarde van de variabele die mislukt is. Dus meer zoals.

The value of class.variable was 0 but not must be less than 1

Alle hulp zou zeer op prijs worden gesteld.

Klee


11
2018-03-07 23:55


oorsprong


antwoorden:


Hmmm. Vervelend! Zoals ik het zie heb je 3 opties:

  1. Je zou een gewoonte kunnen schrijven MessageInterpolator en vervang het in uw validatieconfiguratie, maar dat lijkt erg broos.

  2. U kunt uw eigen aangepaste annotatie in de stijl van @Min declareren (Zie hier hoe u een aangepaste validator kunt uitvoeren) ...

  3. .. Maar de informatie die u nodig hebt, wordt feitelijk vastgehouden binnen het ConstraintViolation-object dat uit de Validator-instantie komt. Het is gewoon dat het niet in het standaardbericht wordt geplaatst.

Ik vermoed dat je op dit moment een soort webraamwerk gebruikt om een ​​formulier te valideren. Als dat het geval is, zou het vrij eenvoudig moeten zijn om de validatie op te heffen en zoiets te doen (snelle hacky-versie, je zou dit netjes moeten maken door een extern eigenschappenbestand te gebruiken):

  Stel <ConstraintViolation <MyForm >> overtredingen = validator.validate (formulier);
  for (ConstraintViolation <MyForm> cv: overtredingen) {
    Klasse <?> AnnoClass = cv.getConstraintDescriptor (). GetAnnotation (). GetClass ();
    if (Min.class.isAssignableFrom (annoClass)) {
      String errMsg = MessageFormat.format (
        "De waarde van {0}. {1} was: {2} maar mag niet minder zijn dan {3}",
        cv.getRootBeanClass (),
        cv.getPropertyPath (). toString (),
        cv.getInvalidValue (),
        .. Cv.getConstraintDescriptor () GetAttributes () te krijgen ( "value"));
            // Zet errMsg terug in het formulier als een fout
    }
  }

13
2018-03-08 04:11



Ik geloof dat je een aangepaste beperking moet maken.
U hebt niet vermeld welke implementatie van de specificatie u gebruikt, maar er is goede documentatie over hoe u een aangepaste beperking kunt maken voor de Hibernate Validator hier.

Een deel van het proces omvat het maken van uw eigen bestand ValidationMessages.properties


1
2018-03-08 04:02