@JsonSerialize @Controller @RequestMapping

时间:2012-09-17 07:59:00

标签: serialization spring-mvc jackson

我从@Controller返回一个Java对象但是我想在这个特定的方法上调用Jackson序列化器。目前没有给出错误,但也没有调用序列化程序。另一种方法是将@JsonSerialize附加到返回对象的类上,但我想知道是否需要对以下代码进行一些更改才能使其工作:

@JsonSerialize(using=SimpleShiftAllocSerializer.class, as=HashMap.class)
@RequestMapping(value = "/shifts/readAlloc.json", method = RequestMethod.GET)
public @ResponseBody
Map<String, ? extends Object> readAlloc(HttpServletRequest request,
        HttpServletResponse response) {
    // ...
    return someObjectToSerialise;
}

1 个答案:

答案 0 :(得分:1)

假设您正在使用mvc命名空间配置,如果类路径上有jackson,则org.springframework.http.converter.json.MappingJacksonHttpMessageConverter会自动注册为HttpMessageConverter。

AnnotationDrivenBeanDefinitionParser:312

if (jacksonPresent) {
    messageConverters.add(createConverterBeanDefinition(MappingJacksonHttpMessageConverter.class, source));
}

所以当@ResponseBody带注释的控制器方法返回时,它会检查是否有任何已注册的HttMessageConverter支持返回的类型和ContentType(HttpMessageConverter.canWrite()),如果是,则会调用其write方法。

它不认为Jackson MessageConvert支持

Map<String, ? extends Object>

将该映射放在WrapperBean中(使用json注释)或实现自己的HttpMessageConverter(不要忘记注册它)