2016-04-08 7 views
1

Я воспользовался службой мирового отдыха, используя весенний ботинок. Я могу вызвать услугу через отдельную программу java. Я также могу назвать это через Advanced Rest Client надстройка для Chrome.Служба загрузки Spring Boot | Метод запроса «GET» не поддерживается

Но когда я пытаюсь ударить его через автономный HTML-страницу с помощью JQuery AJAX Я получаю ошибку

WARN 3748 --- [NiO-9000-Exec-2] osweb.servlet.PageNotFound: Метод запроса «GET» не поддерживается

Любая помощь приветствуется.

PS: Я предполагаю, что, поскольку я могу позвонить в WebService, используя другие режимы , так что контроллер в порядке. Но что-то не так, как я, , вызывая его из HTML.

HTML страницу ниже:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <meta charset="ISO-8859-1"> 
 
    <title>Client</title> 
 
    <script type="text/javascript" src="jquery-2.2.3.js"> 
 
    </script> 
 
    <script type="text/javascript"> 
 
    $(document).ready(function() { 
 
     $("#Submit").click(function() { 
 
     var input = { 
 
      "name": $("#name").val(), 
 
      "language": $("#language").val() 
 
     }; 
 
     var inputStr = JSON.stringify(input); 
 
     alert(inputStr); 
 
     $.ajax({ 
 
      url: "http://localhost:9000/rest/greetMeObj/", 
 
      method: "POST", 
 
      data: inputStr, 
 
      dataType: "jsonp", 
 
      success: function(output) { // callback method for further manipulations 
 
      var str = JSON.stringify(output); 
 
      $("#output").text(data); 
 
      }, 
 
      error: function(data) { // if error occured 
 
      $("#error").text(data); 
 
      } 
 
     }); 
 

 
     }); 
 
    }); 
 
    </script> 
 
</head> 
 

 
<body> 
 
    <div id="input"> 
 
    <label><b>Name:</b> 
 
    </label> 
 
    <input type="text" name="name" id="name" alt="Enter you name" title="Enter your name" /> 
 
    <br /> 
 
    <br /> 
 
    <label><b>Language:</b> 
 
    </label> 
 
    <select name="language" id="language" title="Select your language"> 
 
     <option value="en" label="English" selected="selected">English</option> 
 
     <option value="fr" label="French">French</option> 
 
     <option value="nl" label="Dutch">Dutch</option> 
 
    </select> 
 
    <br /> 
 
    <br /> 
 
    <button title="Submit" type="button" name="Submit" id="Submit" value="Submit" formaction="POST">Submit</button> 
 
    </div> 
 
    <div id="output"></div> 
 
    <div id="error" style="color: red;"></div> 
 
</body> 
 

 
</html>

Spring Controller Ниже

@Controller 
@RequestMapping("/rest/*") 
public class GreetingController { 

    private static final String TEMPLATE_EN = "Hello, %s!"; 
    private static final String TEMPLATE_FR = "Bonjour, %s!"; 
    private static final String TEMPLATE_NL = "Hallo, %s!"; 
    private final AtomicLong counter = new AtomicLong(); 

    @RequestMapping(value="/rest/greetMe", method= RequestMethod.GET) 
    public @ResponseBody Greeting sayHello(
      @RequestParam(value = "name", required = false, defaultValue = "Stranger") String name, 
      @RequestParam(value = "language", required = false, defaultValue = "en") String language) { 
     return new Greeting(counter.incrementAndGet(), String.format(getTemplate(language), name)); 
    } 

    @RequestMapping(value="/rest/greetMeObj", method= RequestMethod.POST) 
    public @ResponseBody Greeting sayHello(
      @RequestBody(required = true) Input input) { 
     return new Greeting(counter.incrementAndGet(), 
       String.format(getTemplate(input.getLanguage()), input.getName())); 
    } 

    private String getTemplate(String language) { 
     String template; 
     switch (language) { 
     case "nl": 
     case "NL": 
      template = TEMPLATE_NL; 
      break; 
     case "fr": 
     case "FR": 
      template = TEMPLATE_FR; 
      break; 
     case "en": 
     case "EN": 
     default: 
      template = TEMPLATE_EN; 
      break; 
     } 
     return template; 
    } 
} 
+0

Это просто WARN, так что вы можете его игнорировать? Или это предупреждение приводит к другой ошибке? – zypro

+0

Решил проблему? – zypro

+0

очевидно, вы не можете сделать сообщение с jsonp для запроса перекрестного домена –

ответ

2

Я думаю, решение описано здесь: Why SpringMVC Request method 'GET' not supported?

Оба значения в RequestMapping должны быть одинаковыми. Поэтому для каждого значения вы должны определить один для GET и один для POST.

@RequestMapping(value="/rest/greetMe", method= RequestMethod.GET) 
public @ResponseBody Greeting sayHello(
     @RequestParam(value = "name", required = false, defaultValue = "Stranger") String name, 
     @RequestParam(value = "language", required = false, defaultValue = "en") String language) { 
    return new Greeting(counter.incrementAndGet(), String.format(getTemplate(language), name)); 
} 

@RequestMapping(value="/rest/greetMe", method= RequestMethod.POST) 
public @ResponseBody Greeting sayHello(
     @RequestBody(required = true) Input input) { 
    return new Greeting(counter.incrementAndGet(), 
      String.format(getTemplate(input.getLanguage()), input.getName())); 
} 
+0

Спасибо, что решил мою проблему! – rilar

Смежные вопросы