자세한 내용은 SpringMVC 차단기를 사용하여 Controller 반환 값을 제어합니다.

배경: 컨트롤러에서 방법이 실현되지 않았을 때 시뮬레이션 결과를 되돌려줍니다.주로 프로젝트 초기에 프론트와 백그라운드의 상호작용에 사용되는데 웹 프로젝트는 프론트에서 요청을 한 다음에 백그라운드에서 응답하고 결과를 되돌려주는 것이다.이 예는 차단기와 주석을 이용하여 실행 방법을 건너뛰고 정의된 구조를 직접 되돌려주는 기능을 실현한다.
StringResult 메모를 정의하여 메서드에 액세스할 때 StringResult의 컨텐트를 반환합니다.Debug 메모를 사용하여 StringResult의 컨텐트를 반환할 방법을 정의합니다.
Debug 기본값은 TRUE

package com.tiamaes.dep.annotation; 
 
import java.lang.annotation.Documented; 
import java.lang.annotation.ElementType; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 
import java.lang.annotation.Target; 
 
@Target({ElementType.TYPE, ElementType.METHOD}) 
@Retention(RetentionPolicy.RUNTIME) 
@Documented 
public @interface Debug { 
  boolean value() default true; 
} 

package com.tiamaes.dep.annotation; 
 
import java.lang.annotation.Documented; 
import java.lang.annotation.ElementType; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 
import java.lang.annotation.Target; 
 
@Target({ElementType.TYPE, ElementType.METHOD}) 
@Retention(RetentionPolicy.RUNTIME) 
@Documented 
public @interface StringResult { 
  String value(); 
} 
메모를 정의한 후 차단기 클래스를 씁니다. 차단기는 Handler Interceptor를 실현해야 합니다.

package com.tiamaes.dep.interceptor; 
 
import java.io.PrintWriter; 
 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
 
import org.springframework.web.method.HandlerMethod; 
import org.springframework.web.servlet.HandlerInterceptor; 
import org.springframework.web.servlet.ModelAndView; 
 
import com.tiamaes.dep.annotation.Debug; 
import com.tiamaes.dep.annotation.StringResult; 
 
public class DebugInterceprot implements HandlerInterceptor { 
  private boolean debug = true; 
   
  public boolean preHandle(HttpServletRequest request, 
      HttpServletResponse response, Object handler) throws Exception { 
    // Debug ( ),  
    if(!this.debug) return true; 
     
    if(handler instanceof HandlerMethod){ 
      HandlerMethod method = (HandlerMethod)handler; 
      Debug isDebug = method.getMethodAnnotation(Debug.class); 
      StringResult stringResult = method.getMethodAnnotation(StringResult.class); 
      // @StringResult  
      // Debug ,  
      if(stringResult==null||(isDebug !=null && isDebug.value() == false)){ 
        return true; 
      }else{ 
        // , stringResult  
        PrintWriter out = response.getWriter(); 
        out.print(stringResult.value()); 
      } 
    } 
     
    return false; 
  } 
   
  public void postHandle(HttpServletRequest request, 
      HttpServletResponse response, Object handler, 
      ModelAndView modelAndView) throws Exception { 
    // TODO Auto-generated method stub 
 
  } 
 
  public void afterCompletion(HttpServletRequest request, 
      HttpServletResponse response, Object handler, Exception ex) 
      throws Exception { 
    // TODO Auto-generated method stub 
 
  } 
 
  public boolean isDebug() { 
    return debug; 
  } 
 
  public void setDebug(boolean debug) { 
    this.debug = debug; 
  } 
   
   
 
} 
XML 구성

<mvc:interceptors> 
  <mvc:interceptor> 
    <mvc:mapping path="/**"/> 
    <bean class="com.tiamaes.dep.interceptor.DebugInterceprot"> 
      <property name="debug" value="true"/> 
    </bean> 
  </mvc:interceptor> 
</mvc:interceptors> 
Controller의 쓰기

package com.tiamaes.dep.system.controller; 
 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.ResponseBody; 
 
import com.tiamaes.dep.annotation.Debug; 
import com.tiamaes.dep.annotation.StringResult; 
 
@Controller 
 
@RequestMapping("/test") 
public class AspectTestController { 
 
  @RequestMapping("/1") 
  @ResponseBody 
  //@Debug(false) 
  @StringResult("Interceptor") 
  public String test1(){ 
     
    return "The controller request!"; 
  } 
} 
이 방법은 컨트롤러에 있는 방법이 제대로 작성되지 않았을 때 프론트 데스크톱 기능을 테스트할 수 있다. 사고방식은 대체로 이렇다. 더욱 강력한 기능은 여러분의 개발이 필요하다.이것은 단지 나의 돌발적인 기상일 뿐, 실제로 프로젝트에서 시험해 본 적이 없다.프로젝트에서 시험해 본 사람이 있으면 효과를 알려주세요. 감사합니다.
만약 누군가가 사용한다면, String Result 주석을 보류하는 것을 권장합니다. 왜냐하면 이 주석은 당신의 방법이 어떤 결과를 되돌려야 하는지 알 수 있기 때문입니다.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기