2016-09-08 5 views
0

In meinem HTML ich habe diese Schaltfläche:My Call Frühlings-Controller ausgefallen

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

In meinem Js ich habe diese Methode:

$("#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" 
     }); 
    } 

Ich habe einen Frühling-Controller erstellen -> 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"); 

    } 
} 

Wenn ich auf meinem Knopf klicken habe ich diesen Fehler:

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

Was ist falsch?

+0

Änderungsart $ Ajax in js im Frühjahr zu erhalten oder senden Sie – matrixguy

+1

da Sie Daten zu veröffentlichen, müssen Sie die Methode Controller ändern method = RequestMethod.POST – george

Antwort

1

Ihre Ajax-Aufruf ändern Methode wie diese

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

zu bekommen oder Feder Controller-Methode ändern

@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 schreiben: Wenn Ihr Projekt einige Stammordner und basierend auf Dispatcher Servlet-URL-Mapping gab auch seinen Namen an, während man etwas wie localhost anfordert: 8080/yourproject/downloadCSV

+0

Ja, ich habe ein Root-Tidder, wo ich dies angegeben, in meinem Ajax oder in meinem Controller Root-Ordner: 'Projekt-Web' – Mercer

+0

im Ajax Anruf/yourfolder/downloadCSV –

+0

vor, was ist Ihr Dispatcher Servlet URL Mapping? –

0

Ihr versucht, Daten zu veröffentlichen, um URL zu erhalten. Also Ihr Controller ändern und versuchen, diese

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"); 

    } 
}