Метод запроса 'POST' не поддерживается в Spring

1

Это мой контроллер:

@Controller
public class UserController {

@Autowired
UserService userService;

@Autowired
SaveBatchService saveBatchService;

@Autowired
MassSMSFormValidator massSMSFormValidator;

@Autowired
SingleSMSFormValidator singleSMSFormValidator;

@RequestMapping("/userRole/sms/mass")
public String massSMSPage(Map<String, Object> map,
        @ModelAttribute("massSMSForm") MassSMSForm massSMSForm) {

    map.put("title", "Массовая рассылка");

    return "massSMS";
}    

@RequestMapping(value="/userRole/sms/mass" ,method = RequestMethod.POST)    
public String massSMSProcess(Map<String, Object> map,
        @ModelAttribute("massSMSForm") MassSMSForm massSMSForm,
        BindingResult result) throws IOException {
    InputStream inputStream = null;    
    MultipartFile file = massSMSForm.getFile();
    massSMSFormValidator.validate(massSMSForm, result);

    if (result.hasErrors()) {
        map.put("errorFlag", true);
        return massSMSPage(map, massSMSForm);
    }

    //and so on
}

И это форма:

<form:form method="post" enctype="multipart/form-data"
    modelAttribute="massSMSForm">

    <c:if test="${!empty errorFlag}">
        <div class="alert alert-danger">
            <b>Ошибка. </b>
            <form:errors path="file" />
        </div>
    </c:if>

    <table>
        <tr>
            <td><input type="file" name="file" accept="text/xml, text/plain" /></td>
        </tr>
        <tr>    
            <td><br /> <input type="submit" value="Загрузить" /></td>

        </tr>
    </table>
</form:form>

Эта страница должна загрузить файл и проверить его имя. Как вы видите, существует специальный метод обработки запросов POST. Но мой сервер говорит, что Request method 'POST' not supported после отправки. Что не так? Должен ли я использовать command attr., А не modelAttribute или что?

UPD:

Сгенерированный HTML:

<form id="massSMSForm" action="/smsc/userRole/sms/mass" method="post" enctype="multipart/form-data">    

    <table>
        <tr>
            <td><input type="file" name="file" accept="text/xml, text/plain"/></td>
        </tr>
        <tr>

            <td><br /> <input type="submit" value="Загрузить" /></td>

        </tr>
    </table>
<input type="hidden" name="_csrf" value="0cd9d283-2ca7-4adc-af4a-ce72a09ceaae" />
</form>

Кроме того, если я удалю enctype="multipart/form-data", это сообщение не появится. Я пытался добавить headers = "content-type=multipart/form-data", но никакого эффекта.

  • 0
    Пожалуйста, разместите сгенерированный HTML-код для формы.
  • 0
    Можете ли вы показать полный класс контроллера? Ваше действие указывает на /smsc/userRole/sms/mass но сопоставление для метода post - /userRole/sms/mass . Например. Контроллеру для работы нужна аннотация уровня класса @RequestMapping (value = "/ smsc"). Может быть, это так, не могу сказать.
Теги:
spring
forms

1 ответ

2

Вы повторяли два раза один и тот же PATH без указания в первом типе запроса.

Измените первый для

      @RequestMapping(value="/userRole/sms/mass" ,method = RequestMethod.GET) 

Похоже, это первый путь

И, глядя на путь вашего html, я думаю, у вас есть контроллер вроде

 @Controller
 @RequestMapping("/smsc/")
 public class MyController{}

Также в вашем методе измените modelAndAttribute для

   MultipartHttpServletRequest defaultMultipartHttpServletRequest

И удалите из формы. вы отправляете файл, а не объект

  • 0
    Нет. Не помогает
  • 0
    смотри мой новый ответ
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню