【发布时间】: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