Skip to content

Instantly share code, notes, and snippets.

@bjpeterdelacruz
Last active August 27, 2021 18:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bjpeterdelacruz/8f8332a751371fdbe421 to your computer and use it in GitHub Desktop.
Save bjpeterdelacruz/8f8332a751371fdbe421 to your computer and use it in GitHub Desktop.
Validator that contains an HttpServletRequest object used to get the session
import java.math.BigDecimal;
import javax.servlet.http.HttpServletRequest;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
public class BillValidator implements Validator {
private HttpServletRequest request;
public void setRequest(HttpServletRequest request) {
this.request = request;
}
public boolean supports(Class clazz) {
return clazz.equals(Form.class);
}
public void validate(Object command, Errors errors) {
BigDecimal paymentDue = (BigDecimal) request.getSession().getAttribute("paymentDue");
if (paymentDue.compareTo(BigDecimal.ZERO) <= 0) {
errors.reject("error.noPaymentDue");
}
}
}
@mguerraferrer
Copy link

How can I use it to achieve this?

DTO

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@GroupSequence({RequestDTO.class, L1.class, l2.class, L3.class})
public class RequestDTO {
    @NotEmpty(groups = L1.class, message = "This field is required")
    private String field1;
    
    @NotEmpty(groups = L1.class, message = "This field is required")
    private String field2;
    
    @NotEmpty(groups = L2.class, message = "This field is required")
    private String field3;

    @Valid
    private List<RequestListDTO> list;
    
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class RequestListDTO{
        @NotEmpty(groups = L3.class, message = "This field is required")
        private String field1;
        
        @NotEmpty(groups = L3.class, message = "This field is required")
        private String field2;  
    }
}

Ajax post request

Content-Disposition: form-data; name="request"
{"field1":"valu1","field2":"value2","field3":"value3","list":[{"field1":"l1","field2":"l2"},{"field1":"l3","field2":"l4"}]}

Spring @controller (not RestController)

@PostMapping(value = "/validate", consumes = "application/json")
@ResponseBody
public ResponseEntity<?> planningConfig(HttpServletRequest request) {
       //Do something here after request validation
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment