2016-09-08 2 views
0

В моем HTML я есть эта кнопка:My Call Spring Controller не удалось

<button id="download_button">Confirmer</button> 

В моих Js у меня есть этот метод:

$("#download_button").click(function() { 
    downloadMes(); 
}); 

    downloadMes: function(){ 
     var sources = this.map.getLayers().getArray().map(function(layer){ 
      var source_url = layer.getSource().getUrls()[0]; 
      var layer_name = layer.getSource().getParams()['LAYERS']; 
      var request = '?VERSION=1.1.0&OUTPUTFORMAT=CSV'; 
      if(_.includes(this.downloadSources, source_url)){ 
       return source_url + request + '&TYPENAME=' + layer_name; 
      } 
     },this); 
     var sourcesToCall = _.compact(sources); 
     var jsonfile= {json:JSON.stringify(sourcesToCall)}; 
     $.ajax({ 
      type:'POST', 
      url: "/downloadCSV", 
      data: jsonfile, 
      dataType: "json" 
     }); 
    } 

У меня есть создать Spring Controller -> DownloadCSVController:

import java.io.ByteArrayOutputStream; 
import java.io.IOException; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipOutputStream; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 


@Controller 
public class DownloadCSVController { 



    @RequestMapping(value = "/downloadCSV", method = RequestMethod.GET) 
    public void getCSV(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws IOException{ 

     System.out.println("DEBUT TELECHARGEMENT"); 
     // SOME LOGIC 
     System.out.println("FIN TELECHARGEMENT"); 

    } 
} 

Когда я нажимаю на моей кнопке у меня есть эта ошибка:

POST http://localhost:8080/downloadCSV 404 (Introuvable)

Что не так?

+0

изменения $ типа АЯКС в JS, чтобы получить или пост весной – matrixguy

+1

, так как вы отправляете данные, вам необходимо изменить метод контроллера для метода = RequestMethod.POST – george

ответ

1

Изменения Ajax вызова GET метода как этот

$.ajax({ 
      type:'GEt', 
      url: "/downloadCSV", 
      data: jsonfile, 
      dataType: "json" 
     }); 

ИЛИ изменить пружинный метод контроллера размещать

@RequestMapping(value = "/downloadCSV", method = RequestMethod.POST) 
    public void getCSV(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws IOException{ 

     System.out.println("DEBUT TELECHARGEMENT"); 
     // SOME LOGIC 
     System.out.println("FIN TELECHARGEMENT"); 

    } 

PS: если ваш проект имеет некоторую корневую папку и на основе диспетчерского отображения адреса сервлета также указал свое имя во время запроса что-то вроде localhost: 8080/yourproject/downloadCSV

+0

да у меня есть root foolder, где я указал это, в моем ajax или в моем контроллере корневая папка: 'project-web' – Mercer

+0

в ajax-вызове/вашей папке/downloadCSV –

+0

до этого, каков ваш URL-адрес URL-адреса серфинга диспетчера? –

0

Ваша попытка опубликовать данные, чтобы получить URL. Таким образом изменить свой контроллер и попробовать этот

import java.io.ByteArrayOutputStream; 
import java.io.IOException; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipOutputStream; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 


@Controller 
public class DownloadCSVController { 



    @RequestMapping(value = "/downloadCSV", method = RequestMethod.POST) 
    public void getCSV(HttpServletRequest request, HttpServletResponse response, @RequestBody ModelMap model) throws IOException{ 

     System.out.println("DEBUT TELECHARGEMENT"); 
     // SOME LOGIC 
     System.out.println("FIN TELECHARGEMENT"); 

    } 
}