Spring MVC,反序列化单个JSON?
问题内容:
如何轻松分隔在同一请求中发送的JSON值?
鉴于我向服务器发布了JSON:
{"first":"A","second":"B"}
如果我在Controller中实现以下方法:
@RequestMapping(value = "/path", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public void handleRequest(@RequestBody String input) {
// ...
}
那么该input
参数将与整个JSON对象组成一个String
{"first":"A","second":"B"}
。我真正想要的是两个单独的字符串(或一个字符串和一个int,以适合特定请求为准),其中只有两个值(应该忽略客户端可能发送的其他键/值对)。
如果字符串是作为请求参数而不是JSON请求正文发送的,那将很简单:
@RequestMapping(value = "/path", method = RequestMethod.POST)
public void handleRequest(@RequestParam("first") String first,
@RequestParam("second") String second) {
// ...
}
我知道我可以创建一个简单的bean类,该类可以与@RequestBody
将同时包含A
和B
使用的批注结合使用,但这似乎是绕道而行的,因为它们在Web应用程序中将具有不同的用途。
依赖关系:org.springframework:spring-web:3.1.0.RELEASE
org.codehaus.jackson:jackson-mapper-asl:1.9.3
问题答案:
POJO
public class Input {
private String first;
private String second;
//getters/setters
}
…然后:
public void handleRequest(@RequestBody Input input)
在这种情况下,您需要Jackson可以在CLASSPATH上使用。
地图
public void handleRequest(@RequestBody Map<String, String> input)