はい、できます。詳細を表示させてください。
まず、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によってキャッチされ、エラーが発生します。以下は、私が使用しDTOオブジェクトである、あなたはより多くの細部を得ることができるようにただのuにそれを示しています
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;
}
}
は、その後私たちのビジネス・ロジック・コントローラでは、我々はベースコントローラを拡張して、以下のようなコードを記述する必要があります。
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);
}
}
}
上記の方法を使用すると、要求内でフィールドを簡単に検証できます。これはこれを達成するための美しい方法です。
希望に役立ちます。
EDIT:
、誰もがそれをテストする必要がありますように、実際のコードで画像を交換してください。
それは、要求内の形式を検証することは可能ですか?あなたは詳細を教えていただけますか?ペイロードに日付を送信している間にクライアント側で検証を意味しますか? – Abhijeet
良い点 - いいえ、データを取得する前に検証の問題がある場合は例外をスローします。 – Dvir
後者は有効な日付です(将来はちょっと) – Henry