我有一个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 String
{
"filmSearch":"<title>"
}
从邮递员到终点我收到空白回复。
然后我做了一个System.out.println(filmSearch)
在输入方法后立即找到String filmSearch就是我从Postman发送的JSON字符串。我的应用程序没有看到JSON并在我的请求中从filmSearch中提取值以附加到应用程序内的字符串filmSearch。
如果我删除
consumes = "application/json"
部分在RequestMapping中并通过它工作的标题的纯文本字符串发送,我得到一个以JSON形式发回的Film对象。
我宁愿不在我的搜索词中使用纯文本,但是如何在输入方法时正确地将我的JSON转换为字符串?
答案 0 :(得分:3)
如果添加请求正文是字符串而不是对象。收到的服务器是String json而不是OBJECT。你可以试试代码:
@RequestMapping(value = "/film", method = RequestMethod.GET, produces = "application/json")
public Film getFilm(@RequestParam("search") String search){
FilmInfo filmInfo = new FilmInfo();
Film film = filmInfo.getFilm(search);
return film;
}
如果您使用邮递员:
答案 1 :(得分:0)
这是因为您将整个JSON有效负载作为字符串传递给&#39; getfilm()&#39;功能。
您预计拨打的电话号码是getfilm(<title>)
,但您实际呼叫的是getfilm({"filmSearch":"<title>"} )
,这是错误的。
最好的选择是,将该字符串转换为JSON,就像这样
JSONObject jsonstring = new JSONObject(filmSearch);
FilmInfo filmInfo = new FilmInfo();
Film film = filmInfo.getFilm(jsonstring.get("title"));
你也可以忽略&#39; consumes =&#34; application / json&#34;&#39;来自请求映射。