SpringMVC 사용자 정의 매개 변수 바 인 딩 상세 설명

개술
1.3 매개 변수 바 인 딩 과정

1.2 @RequestParam
request 가 요청 한 매개 변수 이름과 contrller 방법의 형 매개 변수 이름 이 일치 하면 어댑터 는 자동 으로 매개 변 수 를 연결 합 니 다.일치 하지 않 으 면@RequestParam 을 통 해 request 가 요청 한 매개 변수 이름 을 지정 하여 어떤 방법 으로 연결 할 수 있 습 니까?
전송 해 야 할 인자 에 대해 서 는@RequestParam 의 속성 required 를 통 해 true 로 설정 하고 이 인 자 를 전송 하지 않 으 면 오 류 를 보고 합 니 다.
일부 인자 가 들 어 오지 않 으 면 기본 값 을 설정 해 야 합 니 다.@RequestParam 의 속성 defaultvalue 를 사용 하여 기본 값 을 설정 합 니 다.
간단 한 유형 을 바 꿀 수 있 습 니 다:정형,문자열,단정/이중 정밀도,날짜,불 형.
간단 한 pojo 타 입 바 인 딩 가능
  • 간단 한 pojo 유형 은 간단 한 유형의 속성 만 포함 합 니 다.
  • 바 인 딩 과정:request 가 요청 한 매개 변수 이름과 pojo 의 속성 명 이 일치 하면 바 인 딩 에 성공 할 수 있 습 니 다.
  • 질문:
  • controller 방법 형 삼 에 여러 개의 pojo 가 있 고 pojo 에 중복 되 는 속성 이 있 으 면 간단 한 pojo 바 인 딩 을 사용 하여 맞 춤 형 바 인 딩 이 불가능 합 니 다.
  • 예 를 들 어 방법 은 items 와 User,pojo 가 동시에 name 속성 이 존재 합 니 다.http 요청 과정의 name 에서 items 나 user 에 맞 춤 형 으로 연결 할 수 없습니다.
  • 2.사용자 정의 바 인 딩 사용 속성 편집기
    springmvc 는 날짜 형식 에 대한 기본 바 인 딩 을 제공 하지 않 았 습 니 다.날짜 형식의 바 인 딩 을 사용자 정의 해 야 합 니 다.
    2.1 WebDataBinder 사용(이해)
    controller 클래스 에서 정의:
    
    //        
    // @InitBinder
    // public void initBinder(WebDataBinder binder) throws Exception {
    //   // Date.class    controler    pojo     date  ,   java.util.Date
    //   binder.registerCustomEditor(Date.class, new CustomDateEditor(
    //       new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"), true));
    // }
    이런 방법 을 사용 하 는 문 제 는 여러 contrller 에서 공유 할 수 없다 는 것 이다.
    2.2 WebBinding Initializer 사용(알 아 보기)
    WebBinding Initializer 를 사용 하여 여러 contrller 가 속성 편집 기 를 공유 하도록 합 니 다.
    사용자 정의 WebBinding Initializer 를 프로세서 어댑터 에 주입 합 니 다.
    여러 개의 controller 가 같은 속성 편집 기 를 공동으로 등록 해 야 한다 면 Property Editor Registrar 인 터 페 이 스 를 실현 하고 웹 Binding Initializer 에 주입 할 수 있 습 니 다.
    
    public class CustomPropertyEditor implements PropertyEditorRegistrar {
    
      @Override
      public void registerCustomEditors(PropertyEditorRegistry binder) {
        binder.registerCustomEditor(Date.class, new CustomDateEditor(
            new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"), true));
      }
    
    }
    설정 은 다음 과 같 습 니 다:
    
    <!--         -->
      <!--         -->
      <bean id="customPropertyEditor"
    class="com.hao.ssm.controller.propertyeditor.CustomPropertyEditor"></bean>
    
    <!--    webBinder -->
    <bean id="customBinder"
      class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
      <property name="propertyEditorRegistrars">
        <list>
          <ref bean="customPropertyEditor"/>
        </list>
      </property>
    </bean>
    
    <!--      -->
    <bean
      class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
       <property name="webBindingInitializer" ref="customBinder"></property> 
    </bean>
    3.사용자 정의 매개 변수 바 인 딩 사용 변환기
    3.1 컨버터 인터페이스 실현
    날짜 형식 변환기 와 문자열 을 정의 하여 앞 뒤 공백 변환 기 를 제거 합 니 다.
    
    public class CustomDateConverter implements Converter<String, Date> {
    
      @Override
      public Date convert(String source) {
        
        try {
          //      
          return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(source);
          
        } catch (Exception e) {
          e.printStackTrace();
        }
        
        return null;
      }
    
    }
    public class StringTrimConverter implements Converter<String, String> {
    
      @Override
      public String convert(String source) {
        
        try {
          //         ,          null
          if(source!=null){
            source = source.trim();
            if(source.equals("")){
              return null;
            }
          }
          
        } catch (Exception e) {
          e.printStackTrace();
        }
        
        return source;
      }
    }
    3.2 변환기 설정
    
      <!--     -->
    <bean id="conversionService"
    class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
      <property name="converters">
        <list>
          <bean class="com.hao.ssm.controller.converter.CustomDateConverter" />
          <bean class="com.hao.ssm.controller.converter.StringTrimConverter" />
        </list>
      </property>
    </bean>
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기