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将同时包含AB使用的批注结合使用,但这似乎是绕道而行的,因为它们在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)