Spring Boot Rest服务|不支持请求方法'GET' [英] Spring Boot Rest Service | Request method 'GET' not supported

查看:172
本文介绍了Spring Boot Rest服务|不支持请求方法'GET'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用春季靴子做了一个好的世界休息服务。
我可以通过独立的java程序调用服务。我也可以通过高级休息客户端为Chrome添加。



但是,当我尝试通过使用jQuery AJAX的独立HTML页面击中它时,我收到错误


WARN 3748 --- [nio-9000-exec-2] osweb.servlet.PageNotFound:请求方法'GET'不受支持


任何帮助表示赞赏。


PS:因为我可以使用其他
模式调用WebService,因此控制器没问题。但是我的
从HTML调用它的方式有些错误。


HTML Page Below

pre class =snippet-code-html lang-html prettyprint-override> < 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> <标题>客户< /标题> < script type =text / javascriptsrc =jquery-2.2.3.js> < /脚本> < 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){//进一步操作的回调方法var str = JSON.stringify(output); $(#output).text(data );},error:function(data){//如果发生错误$(#error)。text(data);}});});}); < /脚本>< /头><身体GT; < div id =input> <标签>< b取代;名称:其中/ B个< /标签> < input type =textname =nameid =namealt =输入您的名字title =输入您的名字/> < br /> < br /> <标签>< b取代;语言:其中/ B个< /标签> < select name =languageid =languagetitle =选择您的语言> < option value =enlabel =Englishselected =selected> English< / option> < option value =frlabel =French>法语< / option> < option value =nllabel =荷兰语>荷兰语< / option> < /选择> < br /> < br /> < button title =Submittype =buttonname =Submitid =Submitvalue =Submitformaction =POST> Submit< / button> < / DIV> < div id =output>< / div> < div id =errorstyle =color:red;>< / div>< / body>< / html>



$ b

下面的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问候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问候sayHello(
@RequestBody(required = true)输入输入){
return new Greeting(counter.incrementAndGet(),
String.format(getTemplate(input.getLanguage()),input.getName()));
}

private String getTemplate(String language){
String template;
switch(language){
casenl:
caseNL:
template = TEMPLATE_NL;
休息;
案例fr:
案例FR:
template = TEMPLATE_FR;
休息;
caseen:
caseEN:
default:
template = TEMPLATE_EN;
休息;
}
返回模板;
}
}


解决方案

I猜测解决方案在这里描述:为什么不支持SpringMVC请求方法'GET'?



RequestMapping中的两个值必须相同。因此,对于每个值,您必须为GET定义一个值,为POST定义一个值。

  @RequestMapping(value =/ rest / greetMe ,method = RequestMethod.GET)
public @ResponseBody问候sayHello(
@RequestParam(value =name,required = false,defaultValue =陌生人)字符串名称
@RequestParam (value =language,required = false,defaultValue =en)String language){
return new Greeting(counter.incrementAndGet(),String.format(getTemplate(language),name));

$ b @RequestMapping(value =/ rest / greetMe,method = RequestMethod.POST)
public @ResponseBody问候sayHello(
@RequestBody(required = true)输入输入){
return new Greeting(counter.incrementAndGet(),
String.format(getTemplate(input.getLanguage()),input.getName()));
}


I have made a hello world rest service using spring boot. I am able to call the service via standalone java program. I am also able to call it via Advanced Rest Client add-on for Chrome.

But when I try to hit it via a standalone HTML page using jQuery AJAX I am getting error

WARN 3748 --- [nio-9000-exec-2] o.s.web.servlet.PageNotFound : Request method 'GET' not supported

Any Help is appreciated.

PS: I am assuming that as I am able to call the WebService using other modes so the controller is fine. But something is wrong the way I am calling it from the HTML.

HTML Page Below:

<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 Below

@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;
    }
}

解决方案

I guess the solution is described here: Why SpringMVC Request method 'GET' not supported?

Both values in the RequestMapping has to be the same. So for each value you have to define one for GET and one for 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()));
}

这篇关于Spring Boot Rest服务|不支持请求方法'GET'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆