0
我有一個這樣的API的名稱,使用澤西2和Java:類級別註解不允許檢索領域
@POST
@Path("/doorder")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces("text/plain")
public String doOrder(@BeanParam @Valid OrderBean orderBean) {
// Code here
}
正如你可以看到上面所有的用戶輸入存儲到這個bean:
@AllOrNone(group="address")
public final class OrderBean {
@Group(name="address")
@FormDataParam("address")
private String address;
@Group(name="address")
@FormDataParam("city")
private String city;
@Group(name="address")
@FormDataParam("postcode")
private String postcode;
// Getters and setters
}
我用我創建了一個類級別的註解,被稱爲「AllOrNone」,其中所有的字段或沒有必須包含有效值。 但是在我建立的情況下,驗證失敗的響應ExceptionMapper,我沒有關於該組中的字段的名稱或組的名稱信息:
@Provider
public class ConstraintViolationMapper implements ExceptionMapper<ConstraintViolationException> {
@Override
public Response toResponse(ConstraintViolationException e) {
// here no clue about the name of the group or the fields involved
}
}
我如何獲得上述代碼中的字段名稱或組名稱?
編輯:
在這裏我也添加一個用於創建註釋代碼:
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE,
ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RUNTIME)
@Constraint(validatedBy = AllOrNoneValidator.class)
@Documented
public @interface AllOrNone {
String message() default "Group of fields should have all fields or none";
Class<?>[] groups() default {};
String group();
Class<? extends Payload>[] payload() default {};
}
這裏驗證碼:
public final class AllOrNoneValidator extends GroupValidator implements ConstraintValidator<AllOrNone, Object> {
private String group;
@Override
public void initialize(final AllOrNone constraintAnnotation) {
this.group = constraintAnnotation.group();
}
@Override
public boolean isValid(final Object bean, final ConstraintValidatorContext constraintValidatorContext) {
// some code here
}
}
我試過但它retu rns「doOrder.arg0」。沒有什麼用處。我需要知道該組的名字或屬於該組的字段的名稱。 – user1883212
@ user1883212如果您正在使用Java 8,請嘗試使用參數名稱進行編譯。 –
嘗試使用「-parameters」進行編譯,但仍得到相同的結果 – user1883212