java - Spring 无法使用空键返回 JSON 响应

标签 java json spring spring-mvc

下面是我写的代码。

@RequestMapping(value = "/getData", method = RequestMethod.GET)   
public @ResponseBody Map<String,String> test() throws IOException {   
Map<String,String> map = new HashMap<String,String>();
map.put("key","value");
map.put(null, "Key's Value"); //**This highlighted code causing the problem, if I remove this then it works fine.**    
    return map;  
}

当我点击 URL localhost:8080/myapp/getData 我收到以下回复

10.5.1 500 Internal Server Error The server encountered an unexpected condition which prevented it from fulfilling the request.

即使是 Spring 也不会打印任何服务器端异常!

我想知道 Spring 无法处理 key 为 null 的 JSON 响应的根本原因。

最佳答案

如果你想要一个空键按照这个

http://www.baeldung.com/jackson-map-null-values-or-null-key

class MyDtoNullKeySerializer extends JsonSerializer<Object> {
    @Override
    public void serialize(Object nullKey, JsonGenerator jsonGenerator, SerializerProvider unused) throws IOException, JsonProcessingException {
        jsonGenerator.writeFieldName("");
    }
}


@Test
public void givenAllowingMapObjectWithNullKey_whenWriting_thenCorrect() throws JsonProcessingException {
    ObjectMapper mapper = new ObjectMapper();
    mapper.getSerializerProvider().setNullKeySerializer(new MyDtoNullKeySerializer());

    MyDto dtoObject = new MyDto();
    dtoObject.setStringValue("dtoObjectString");

    Map<String, MyDto> dtoMap = new HashMap<String, MyDto>();
    dtoMap.put(null, dtoObject);

    String dtoMapAsString = mapper.writeValueAsString(dtoMap);

    assertThat(dtoMapAsString, containsString("\"\""));
    assertThat(dtoMapAsString, containsString("dtoObjectString"));
}

关于java - Spring 无法使用空键返回 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33075147/

相关文章:

java - Spring:在上下文初始化之前显示静态页面以输入数据源密码

java - Spring Java 应用程序找不到 keystore 文件

java - Spring Boot Actuator - 自定义健康端点

java - 是否可以让我的自定义验证注释在持久化时被忽略?

java - 在 Java 中,对于单行上的多个整数使用 BufferedReader 而不是 Scanner Class 是最佳选择吗?

java - 如何在CMD中设置编译和运行Java

json - Jackson @JsonFormat 设置日期少一天

python - 使用 jsonpickle 从文件中保存和加载对象

java - 使用 Jackson 将 java.time.localdate 序列化为 json

java - 多维数组输出?