1

@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;
}
4

1 に答える 1

1

mvc 名前空間構成を使用していると仮定すると、jackson がクラスパスで使用可能な場合、org.springframework.http.converter.json.MappingJacksonHttpMessageConverter は HttpMessageConverter として自動的に登録されます。

AnnotationDrivenBeanDefinitionParser:312

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

そのため、@ResponseBody アノテーション付きコントローラー メソッドが返されると、返された型と ContentType (HttpMessageConverter.canWrite()) をサポートする HttMessageConverter が登録されているかどうかがチェックされ、存在する場合はその書き込みメソッドが呼び出されます。

Jackson MessageConvert がサポートしているとは思わない

Map<String, ? extends Object>

そのマップを (json アノテーションを使用して) WrapperBean に配置するか、独自の HttpMessageConverter を実装します (登録することを忘れないでください)。

于 2012-09-17T08:53:03.360 に答える