Request method 'GET' not supported Spring MVC

 ̄綄美尐妖づ 提交于 2019-12-23 12:44:07

问题


I have the following code in the controller

  private static final String CJOB_MODEL    = "cJobNms";

  @RequestMapping(value = MAIN_VIEW, method = RequestMethod.POST)
  public String showTestXsd(//@ModelAttribute(FORM_MODEL) TestXsdForm xsdForm,
            //@ModelAttribute(MODEL) @Valid
            //TestXsdTable testXsdTable,
            @RequestParam String selected,
            Model model) throws DataException {

        String cJobNm =null;
        List<String> cJobNmList = null;
        System.out.println("selected:"+ selected);
        String xsdView = testXsdService.getXsdString();
        cJobNmList = testXsdService.getCJobNm();
        Set<String> cJobNmSet = new HashSet<String>(cJobNmList);
        TestXsdForm xsdForm = new TestXsdForm();
        model.addAttribute("xsdView", xsdView);
        model.addAttribute("xsdFormModel", xsdForm);
        model.addAttribute(CJOB_MODEL, cJobNmSet);
        xsdForm.setXsdString(xsdView);

        return MAIN_VIEW;
    }

And the following code in my jsp.

<form:form modelAttribute="testXsdTable" name="xsdForm" action="/xsdtest/testXsdTables"
                        id="xsdForm" method="POST" class="form"
                                            enctype="multipart/form-data" >


            <tr>
             <td>
              <label for="cJobs" class="fieldlabel">Jobs:</label>
               <select id="cJobs" name="cJobs" >
                <option value="${selected}" selected>${selected}</option>
                <c:forEach items="${cJobNms}" var="table">
                    <c:if test="${table != selected}">
                            <option value="${table}">${table}</option>
                        </c:if>
                 </c:forEach>
               </select>
            </td>
            </tr>
            <pre>
               <c:out value="${xsdForm.xsdString}"/>
            </pre>
<div class="confirmbuttons">
    <a href="#"class="button positive" id="saveXsdButton" onclick="saveTestXsd();">
        <span class="confirm">Save</span>
    </a>
</div>

When the user selects an option from the cJobNms list the selected value should be displayed in the controller method showTestXsd. Please let me know what I am doing wrong.

Currently I am getting a message : Request method 'GET' not supported

 @RequestMapping(value = SAVE_VIEW, method = RequestMethod.POST)
public String saveTestXsd( @ModelAttribute(MODEL) @Valid
                            TestXsdTable testXsdTable,
                            final BindingResult result,
                            final Principal principal,
                            Model model) throws DataException {

    boolean isNew = true;
    System.out.println("entering saveTestXsd in controller");
    Map<String,Object> modelMap = model.asMap();
    String xsdView = (String)modelMap.get("xsdView");
    System.out.println("xsdView:::"+ xsdView);
    if(testXsdTable!= null){
         System.out.println("xsdView(testXsdForm):::"+ testXsdTable.getXsdView());
    }


    // Check for validation errors
    if (result.hasErrors()) {
        return SAVE_VIEW;
    }

    // Get the user information
    User loggedInUser = (User) ((Authentication) principal)
                        .getPrincipal();

    return SAVE_VIEW;
}

回答1:


I'm going to start an answer and add to it as details become available. For your current error

org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'selected' is not present

This happens because when you have something like

@RequestParam String selected,

And @RequestParam doesn't have a value attribute set, Spring will use the name of the parameter to look for the request parameter to bind. In your form, you obviously don't have a parameter named selected. What you want is to get the value in

<select id="cJobs" name="cJobs" >

So change your @RequestParam to

@RequestParam(value = "cJobs") String selected

to match the name attribute of the select input element.




回答2:


Replace

@RequestMapping(value = MAIN_VIEW, method = RequestMethod.POST)

with

@RequestMapping(value = MAIN_VIEW, method = RequestMethod.GET)

You should also consider changing the form POST method. Your use case is more of Get rather than POST




回答3:


use the next code

@RequestMapping(value = MAIN_VIEW, method = RequestMethod.GET)
//if you want to use both ( post and get ) remove Request Method annotation

//@RequestMapping(value = MAIN_VIEW)
@RequestParam(value="cJobs", required = false) String selected; 
//use this to handle an optional parameter



回答4:


You just have make a change in @RequestParam which you have used in your code like

@RequestParam("studentName") String name

Replace above line of code with

@RequestParam(value="studentName") String name

Your problem will definitely be resolved.



来源:https://stackoverflow.com/questions/18896435/request-method-get-not-supported-spring-mvc

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!