자세한 내용은 Spring MVC에서 메모를 사용하여 RequestParams 확인

4596 단어 springmvc주해
개요
Spring MVC는 Bean Validation을 지원합니다. 이 검증 기술을 통해 주석 방식을 통해 입력 파라미터를 쉽게 검증할 수 있습니다. 이전에 사용한 검사 방식은 모두 Bean 대상을 바탕으로 했지만 @RequestParam에 Bean 대상이 없어서 검사를 진행할 수 없습니다. @Validated 주석을 사용하여 검사를 진행할 수 있습니다.
bean 객체 검증
일반적으로 bean 객체는 자동으로 속성을 검증할 수 있도록 두 단계로 해결할 수 있습니다.
1. 객체 선언

package com.github.yongzhizhan.draftbox.model;

import javax.validation.constraints.Size;

/**
 *  
 * @author zhanyongzhi
 */public class Foo {
  private String validString;

  @Size(min = 1, max = 5)
  public String getValidString() {
    return validString;
  }

  public void setValidString(final String vValidString) {
    validString = vValidString;
  }
}

2. @Valid 메모를 통해 객체 사용

@ResponseBody@RequestMapping(value = "validObject", method = RequestMethod.POST)
@ResponseStatus(HttpStatus.OK)
public String validObject(
    @RequestBody()
    @Valid Foo vFoo, BindingResult vBindingResult){

  return vFoo.getValidString();
}

RequestParams 검증
bean을 검사하는 방식을 사용하면 RequestParam의 내용을 검사할 방법이 없습니다. 일반적으로 Get 요청을 처리할 때 다음과 같은 코드를 사용합니다.

@ResponseBody@RequestMapping(value = "validString", method = RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
public String validString(
    @RequestParam(value = "str", defaultValue = "")
    String vStr){

  return vStr;
}
@Valid 메모를 사용하여 RequestParam에 대응하는 매개 변수를 메모하는 것은 유효하지 않습니다. @Validated 메모를 사용하여 검증을 실시해야 합니다.작업 단계는 다음과 같습니다.
1. 오류 처리 클래스 선언

package com.github.yongzhizhan.draftbox.controller;

import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;

import javax.validation.ValidationException;

@ControllerAdvice
@Component
public class GlobalExceptionHandler {
  @Bean
  public MethodValidationPostProcessor methodValidationPostProcessor() {
    return new MethodValidationPostProcessor();
  }

  @ExceptionHandler
  @ResponseBody
  @ResponseStatus(HttpStatus.BAD_REQUEST)
  public String handle(ValidationException exception) {
    System.out.println("bad request, " + exception.getMessage());
    return "bad request, " + exception.getMessage();
  }
}

둘째, @Validated를 선언하고 검증 메모를 추가합니다.

package com.github.yongzhizhan.draftbox.controller;

import com.github.yongzhizhan.draftbox.model.Foo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;
import javax.validation.constraints.Size;

@RestController
@SuppressWarnings("UnusedDeclaration")
@Validated
public class IndexController {
  @ResponseBody
  @RequestMapping(value = "validString", method = RequestMethod.GET)
  @ResponseStatus(HttpStatus.OK)
  public String validString(
      @RequestParam(value = "str", defaultValue = "")
      @Size(min = 1, max = 3)
      String vStr){

    return vStr;
  }
}
코드:spring-mvc-validator_jb51.rar
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기