Spring MVC Restful 의 DELETE 전송 방식

1976 단어 자바
Spring Restful 에서 브 라 우 저가 PUT 와 DELETE 전송 프로 토 콜 을 지원 하지 않 을 때 폼 에 숨겨 진 영역 을 추가 할 수 있 습 니 다. 이 숨겨 진 name 속성 은: 입 니 다.method 예:
        
...
  
   그러나 Spring 의 기본 방법 필터 (org. springframework. web. filter. HiddenhttpMethodFilter) 는 POST 전송 프로 토 콜 만 판단 합 니 다.
   사용자 정의 GET 지원
      
public class MyHiddenHttpMethodFilter extends HiddenHttpMethodFilter{

	private String methodParam = DEFAULT_METHOD_PARAM;
	
	public void setMethodParam(String methodParam){
		Assert.hasText(methodParam, "'methodParam' must not be empty");
		this.methodParam = methodParam;
	}
	
	@Override
	protected void doFilterInternal(HttpServletRequest request,
			HttpServletResponse response, FilterChain filterChain)
			throws ServletException, IOException {
		String paramValue = request.getParameter(methodParam);
		String _method = request.getMethod();
		if (StringUtils.hasLength(paramValue)) {
			String method = paramValue.toUpperCase(Locale.ENGLISH);
			boolean b = ("POST".equals(_method) && "PUT".equalsIgnoreCase(method)) || ( "GET".equals(_method) && "DELETE".equalsIgnoreCase(method));
			if( b ){
				HttpServletRequest wrapper = new HttpMethodRequestWrapper(request, method);
				filterChain.doFilter(wrapper, response);
			}else{
				
			}
		}
		else {
			filterChain.doFilter(request, response);
		}
	}
	
	private static class HttpMethodRequestWrapper extends HttpServletRequestWrapper {

		private final String method;

		public HttpMethodRequestWrapper(HttpServletRequest request, String method) {
			super(request);
			this.method = method;
		}

		@Override
		public String getMethod() {
			return this.method;
		}
	}
	
}

   이러한 구현 은 DELETE 프로 토 콜 을 사용 할 때 GET 를 사용 하고 인 자 를 추가 하 는 것 입 니 다method=DELETE;PUT 프로 토 콜 을 사용 할 때 POST 를 사용 하고method=PUT

좋은 웹페이지 즐겨찾기