2016-02-15 15 views
6

İlkbaharda yol değişkenimi nasıl doğrulayabilirim. Ben onun sadece tek bir alan i@PathVariable Doğrulaması Spring 4

@RestController 
    @Validated 
public class MyController { 
    @RequestMapping(value = "/{id}", method = RequestMethod.PUT) 
    public ResponseEntity method_name(
      @Valid 
      @Nonnull 
      @Size(max = 2, min = 1, message = "name should have between 1 and 10 characters") 
      @PathVariable String id) { 
    /// Some code 
    } 
} 
+0

Kodunuzda hiç bir yol değişkeni yok, en azından URL'nizde değil, neyin doğrulanması gerektiğinden emin olun ... –

+0

Üzgünüm hile kopyalayın ve buradaki kodu yapıştırın –

+0

Eğer method_name yönteminde bir döngü varsa basitçe deneyebilirsiniz (id == null || id.length() <1 || id.length()> 2) {Dize mesajı = "adın 1 ile 10 karakter arasında olması gerekir"; } ve yanıtı true olursa, –

cevap

12

Ben yol değişkene doğrulama ekleyerek yapıyor çalıştı bir Pojo için

@RestController 
public class MyController { 
    @RequestMapping(value = "/{id}", method = RequestMethod.PUT) 
    public ResponseEntity method_name(@PathVariable String id) { 
     /// Some code 
    } 
} 

taşımak istemiyor ama onun hala çalışmıyor vermediği için, id alanını doğrulamak istiyorum Sen senin Bahar yapılandırmasında fasulye oluşturmak gerekir: Sen kumandanızda @Validated ek açıklama bırakmalısınız

@Bean 
    public MethodValidationPostProcessor methodValidationPostProcessor() { 
     return new MethodValidationPostProcessor(); 
    } 

. ne zaman doğrulama isabetler mesajı görmelisiniz bu değişikliklerden sonra

@ExceptionHandler(value = { ConstraintViolationException.class }) 
    @ResponseStatus(value = HttpStatus.BAD_REQUEST) 
    public String handleResourceNotFoundException(ConstraintViolationException e) { 
     Set<ConstraintViolation<?>> violations = e.getConstraintViolations(); 
     StringBuilder strBuilder = new StringBuilder(); 
     for (ConstraintViolation<?> violation : violations) { 
       strBuilder.append(violation.getMessage() + "\n"); 
     } 
     return strBuilder.toString(); 
    } 

:

Ve ConstraintViolationException işlemek için MyController sınıfında bir Exceptionhandler gerekir.

S.S .: Sadece @Size doğrulama ile denedim.

+0

Çözümü denedim ama işe yaramıyor gibi görünüyor. Tek fark GET yöntemim. Bu ayrı ele alınır mı? –

+0

@NickDiv no aynı olmalıdır. Ne senin için çalışmıyor? Belki de bir soru sormalı ve burada bunun bağlantısını yorumlamalısınız. – Patrick

+0

@Patrick: Bunun için tam kaynak kodu verebilir misiniz, denedim ama hala PathVariable'ı doğrulamak başarısız oldu – nguyenngoc101

0

Sana sınıf sonra bir yanıt mesajı almak için bu geçici çözümü uygulamak zorunda bu hedefe gerçek Validator eşittir arşivlemek için @pathVariable

@RestController 
@RequestMapping("/xyz") 
public class MyController { 

    @RequestMapping(value = "/{id}", method = RequestMethod.PUT) 
    public ResponseEntity method_name(@PathVariable String id) { 
     /// Some code 
    } 
} 
0

kullanmak dinlenmeye @RequestMapping("/") onun bir sorun böylece @RequestMapping("/") ekle düşünüyorum:

@GetMapping("/check/email/{email:" + Constants.LOGIN_REGEX + "}") 
@Timed 
public ResponseEntity isValidEmail(@Email @PathVariable(value = "email") String email) { 
    return userService.getUserByEmail(email).map(user -> { 
     Problem problem = Problem.builder() 
      .withType(ErrorConstants.CONSTRAINT_VIOLATION_TYPE) 
      .withTitle("Method argument not valid") 
      .withStatus(Status.BAD_REQUEST) 
      .with("message", ErrorConstants.ERR_VALIDATION) 
      .with("fieldErrors", Arrays.asList(new FieldErrorVM("", "isValidEmail.email", "not unique"))) 
      .build(); 
     return new ResponseEntity(problem, HttpStatus.BAD_REQUEST); 
    }).orElse(
     new ResponseEntity(new UtilsValidatorResponse(EMAIL_VALIDA), HttpStatus.OK) 
    ); 
}