【发布时间】:2017-11-30 07:36:45
【问题描述】:
我有一个 RestController 类,它有一个按标题搜索电影的方法:
@RequestMapping(value = "/film", method = RequestMethod.POST,
consumes = "application/json", produces = "application/json")
public Film getFilm(@RequestBody String filmSearch){
FilmInfo filmInfo = new FilmInfo();
Film film = filmInfo.getFilm(filmSearch);
return film;
}
如果我发送一个 json 字符串
{
"filmSearch":"<title>"
}
从 Postman 到端点,我收到一个空白回复。
然后我做了一个
System.out.println(filmSearch)
在输入方法后找到 String filmSearch 正是我从 Postman 发送的 JSON 字符串。我的应用程序没有看到 JSON 并在我的请求中从filmSearch 中提取值以附加到应用程序内字符串filmSearch。
如果我删除
consumes = "application/json"
加入 RequestMapping 并发送它工作的标题的纯文本字符串,我得到一个以 JSON 形式发回的 Film 对象。
虽然我不想在搜索词中使用纯文本,但如何在输入方法时正确地将我的 JSON 转换为字符串?
【问题讨论】:
-
为什么要使用 POST HTTP 方法来检索东西?
-
我想客户端没有在其请求中指定
application/json。 -
我的 Postman 请求是一个原始正文请求,其中选择了 application/json 选项,而不是 text(plain/text)。
-
您似乎希望 Spring 将 JSON 解析为一个对象,看到它有一个 filmSearch 属性,提取它的值,并将这个值传递给您的方法。为什么会这样做?它不会。你发送 JSON,你接收 JSON。但是,它可以解析 JSON 并返回一个与您发送的 JSON 结构相匹配的对象(使用 JSON 映射器,例如 Jackson)。
标签: java spring rest deserialization