Spring3CorsFilter.java
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Spring3CorsFilter {}
Spring3CorsFilterHandlerInterceptor.java
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class Spring3CorsFilterHandlerInterceptor extends HandlerInterceptorAdapter {
     @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws
                Exception {
            if (handler instanceof HandlerMethod) {
                HandlerMethod handlerMethod = (HandlerMethod) handler;
                // Test if the controller-method is annotated with @Spring3CORSFilter
                Spring3CorsFilter filter = handlerMethod.getMethod().getAnnotation(Spring3CorsFilter.class);
                if (filter != null ) {
                    // ... do the filtering
                    response.setHeader("Access-Control-Allow-Origin", "http://localhost:4200");
                    response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
                    response.setHeader("Access-Control-Max-Age", "3600");
                    response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
                }
            }
            return true;
        }
}
Controller.java
@Spring3CorsFilter
    @ResponseBody
    @RequestMapping(value = "/search", method = RequestMethod.GET,headers="Accept=application/json")
    public List <SuiviCommande> getSearch() int L, @RequestBody SuiviCommandeDto A) {
         ....
    }