【问题标题】:Spring MVC 415 error when posting form发布表单时出现 Spring MVC 415 错误
【发布时间】:2017-08-26 21:48:41
【问题描述】:

执行 POST 请求时出现 415 错误。 这是我的表格:

<c:url value="/createOrUpdate" var="actionUrl"/>
  <form  action="${actionUrl}" method="post" enctype="application/x-www-form-urlencoded">
    <table class="editor silver">
      <tr>
        <th colspan="2">Edit advert details</th>
        <input type="number" hidden value="${advert.id}" name="id"/>
      </tr>
      <tr>
        <td>Owner:</td>
        <td>
          <input type="text" disabled value="${advert.owner}" name="owner"/>
        </td>
      </tr>
      <tr>
        <td>Publication date:</td>
        <td>
          <input type="datetime" disabled value="${advert.publicationDate}" name="publicationDate"/>
        </td>
      </tr>
      <tr>
        <td>Select rubric</td>
        <td>
          <select name="rubric">
            <option value="sale" selected>Sale</option>
            <option value="buy">Buy</option>
            <option value="lease">Lease</option>
            <option value="services">Services</option>
            <option value="dating">Dating</option>
          </select>
        </td>
      </tr>
      <tr>
        <td>Enter header:</td>
        <td>
          <input type="text" value="${advert.header}" name="header"/>
        </td>
      </tr>
      <tr>
        <td>Enter text:</td>
        <td>
          <input type="text" value="${advert.text}" name="text"/>
        </td>
      </tr>

这是我正在执行请求的控制器

@RequestMapping(value = "/createOrUpdate", method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public ModelAndView editAdvert(@RequestBody Advert advert) {//some actions

Advert 是一个带有 getter 和 setter 的简单 POJO:

private long id;

private String owner;

private Date publicationDate;

private String rubric;

private String header;

private String text;

我做错了什么? p.s.据我了解,春天应该将“名称字段”映射到 POJO 的字段中。正确的? 已添加 好的,我发现有些值没有以表格形式发送。我在浏览器中检查了控制台,现在没问题,但仍然出现 415 错误。

【问题讨论】:

  • 您可以使用 ModelAttribute 代替 RequestBody。 RequestBody 消费 json,xml。删除 application/x-www-form-urlencoded 因为它已经是默认类型。如果您想使用@requestbody,那么您将表单数据发布为 json,使用 JQuery 之类的 JavaScript 库,您将发布带有 Content-Type:application/json 的 JSON 数据。并使用 jackson-lib 轻松将 json 转换为 java 对象。
  • 但现在我收到错误 400 - 错误请求
  • 问题可能是发送日期。关注如何发送日期 spring mvc。您可以使用 DateTimeFormat like this 或 InıtBinder
  • 是的,它有效。非常感谢。

标签: java spring model-view-controller web


【解决方案1】:

问题在于日期转换。 更改@RequestBody to @MadelAttribute 并输入@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) private Date publicationDate; 到模型

【讨论】:

    【解决方案2】:

    您可以使用@ModelAttribute 代替@RequestBody。 RequestBody 消耗 json,xml。删除 application/x-www-form-urlencoded 因为它已经是默认类型。

    如果您想使用@Requestbody,那么您将表单数据发布为 json,使用 JQuery 之类的 JavaScript 库,您将使用 Content-Type:application/json 发布 JSON 数据。并使用 jackson-lib 轻松将 json 转换为 java 对象。

    400 - 错误请求

    问题可能是日期发送。重点讲一下spring mvc如何发送日期。你可以使用@DateTimeFormatlike this@InıtBinder

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-24
      • 2017-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      相关资源
      最近更新 更多