예, 가능합니다. 세부 사항을 보여 드리겠습니다.
먼저 PLS 아래와 같이 모든 요청 필터링 기지국 제어기 생성 : 위의 코드에서
package com.letv.address.controller;
import com.letv.address.utils.ConstantCode;
import com.letv.address.utils.ResponseWrapper;
import com.letv.xice.core.controller.GlobalController;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError;
import java.util.ArrayList;
import java.util.List;
/**
* Created by shichaoyang on 2017/1/10.
*/
public class BaseController extends GlobalController {
public ResponseWrapper requestCheckAndPost(BindingResult result) {
if (result.hasErrors()) {
List<Object> errorList = new ArrayList<>();
StringBuilder sBuilder = new StringBuilder();
for (ObjectError error : result.getAllErrors()) {
String fieldName = ((FieldError) error).getField();
String fieldMessage = error.getDefaultMessage();
sBuilder.append(fieldName)
.append(" ")
.append(getMessage(fieldMessage))
.append(";");
errorList.add(fieldName);
}
return new ResponseWrapper(
ConstantCode.FAILING_WITH_ERROR_PARAM_CODE
, errorList.toArray()
, ""
, sBuilder.toString()
);
}
return null;
}
}
를 상기 BindingResult는 @NotBlank, @Pattern 등처럼 @JsonFormat 또는 다른 성분 헤더를 검사 할 것이다 에. 규칙을 위반하면 BindingResult에 의해 캐치되며 오류가 발생할 수 있습니다.
이
package com.letv.address.controller.dto;
import com.letv.address.utils.ConstantCode;
import org.hibernate.validator.constraints.NotBlank;
/**
* Created by shichaoyang on 2016/12/23.
*/
public class ChildrenAreaSelectRequest{
@NotBlank(message = ConstantCode.REQUEST_VALIDATE_NOT_EMPTY)
private String areaIds;
public String getAreaIds() {
return areaIds;
}
public void setAreaIds(String areaIds) {
this.areaIds = areaIds;
}
}
그런 다음 우리의 비즈니스 로직 컨트롤러, 우리는 다음과 같은 코드를 기본 컨트롤러를 확장하고 작성해야합니다 : 다음은 내가 사용하는 DTO 객체가, 그냥 당신이 더 많은 정보를 얻을 수 있도록 U에게 보여
package com.letv.address.controller;
import com.letv.address.controller.dto.ChildrenAreaSelectRequest;
import com.letv.address.controller.dto.ParentAreaSelectReqeust;
import com.letv.address.domain.Area;
import com.letv.address.service.ChildAreaService;
import com.letv.address.utils.ConstantCode;
import com.letv.address.utils.ResponseWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
/**
* Created by shichaoyang on 2016/12/12.
*/
@RestController("areaController")
public class AreaController extends BaseController {
@Autowired
protected ChildAreaService childAreaService;
/**
* get area info by parent id
*
* @param areaReqeust
* @param result
*/
@ResponseBody
@RequestMapping(value = ConstantCode.CHILD_AREA_PATH, method = {RequestMethod.POST})
public ResponseWrapper childArea(@RequestBody @Valid ParentAreaSelectReqeust areaReqeust, BindingResult result) {
ResponseWrapper validationWrapper = requestCheckAndPost(result);
if (validationWrapper != null) {
return validationWrapper;
}
List<Area> areaList = childAreaService.selectByParentId(areaReqeust.getParentId());
if (areaList == null || areaList.size() == 0) {
return new ResponseWrapper(ConstantCode.SUCCESS_WITH_EMPTY_DATA_CODE, new ArrayList<>());
} else {
return new ResponseWrapper(ConstantCode.SUCCESS_WITH_FILL_DATA_CODE, areaList);
}
}
}
위의 방법을 사용하면 요청 내에서 필드의 유효성을 쉽게 확인할 수 있습니다. 이것은 이것을 달성하는 아름다운 방법입니다.
희망이 있습니다.
편집 : 사람이 그것을 테스트 할 필요가 있도록
실제 코드로 이미지를 교체합니다.
는 요청 내에서 형식을 검증 할 수 있습니까? 정교하게 제발 주시겠습니까? 페이로드에 날짜를 보내는 동안 클라이언트 쪽에서 유효성 검사를 의미합니까? – Abhijeet
좋은 점 - 아니요. 데이터를 가져 오기 전에 유효성 검사 문제가있는 경우 예외가 발생합니다. – Dvir
후자는 유효한 날짜입니다 (나중에 약간 있습니다). – Henry