我正在接收一个 JSON 对象,该对象是从前端作为字符串发送给我的,我希望 spring-boot 将其解析为我的 Map 。
我尝试过 @RequestHeader("header-name") Map 标头和 @RequestHeader Map 标头,但两者都为我提供了所有标头的映射,而不是我的目标包含 JSON 的标头。
public ResponseEntity<MyObject> getStuff(@RequestHeader("My-Header") Map myHeaderJSON)
Run Code Online (Sandbox Code Playgroud)
我希望 Spring 将变量 myHeaderJSON 字符串解析为 Map。有什么办法可以实现这一点吗?让 spring-boot 帮我将字符串解析为 JSON 或 Map?
如果您希望 Spring 将单个 http 请求标头“注入”到您的控制器方法(作为参数)中,请尝试以下方法:
@RequestMapping("/your-path")
public ResponseEntity<MyObject> getStuff(@RequestHeader("My-Header") String jsonValue) {
//...
}
Run Code Online (Sandbox Code Playgroud)
另请参阅此处:https: //www.viralpatel.net/spring-requestheader-example/
您还可以尝试实现自定义转换器,请参阅此处的示例:
解决方法是使用ObjectMapperJackson 库中的实例将 JSON 字符串转换为对象java.util.Map......
可以这样工作(虽然没有测试):
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
@Component
public class JsonToMapConverter implements Converter<String, Map<String,String>> {
private ObjectMapper objectMapper = new ObjectMapper();
@Override
public Map<String, String> convert(final String json) {
try {
return objectMapper.readValue(json, Map.class);
} catch (IOException e) {
//handle exception...
}
}
}
Run Code Online (Sandbox Code Playgroud)
不要忘记将 Jackson 添加到您的依赖项中,例如在 Maven 中:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4841 次 |
| 最近记录: |