Spring RequestBody将JSON转换为String

时间:2017-11-30 07:36:46

标签: java spring rest deserialization

我有一个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转换为字符串?

2 个答案:

答案 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;
}

如果您使用邮递员:

  • 网址:/ flim?search = minion
  • 方法:GET
  • 标题:内容类型:application / json

答案 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;来自请求映射。