2014-11-03 17 views
9

Niedawno zmigrowałem nasz projekt od wiosny 3 do wiosny 4.1.1. Migruję też jacksona z wersji 1 do wersji 2.3.0.Migracja wiosny od 3.2 do 4.1.1: kłopoty z serializacją JSON

Teraz napotkać problemy przy użyciu kontrolerów z void odpowiedzi

@RequestMapping(value="toto", method="POST") 
public @ResponseBody void myController() { 
//content 
} 

W czasie wykonywania, gdy nazywając ją uzyskać wyjątek tego formularza:

Failed to evaluate serialization for type [void]: java.lang.IllegalStateException: Failed to instantiate standard serializer (of type com.fasterxml.jackson.databind.ser.std.NullSerializer): Class com.fasterxml.jackson.databind.ser.BasicSerializerFactory can not access a member of class com.fasterxml.jackson.databind.ser.std.NullSerializer with modifiers "private" 

Zastanawiam się, czy ktoś spotkał taki sam rodzaj problemu lub masz pojęcie, co jest nie tak.

Z góry dziękuję.

Odpowiedz

14

Jeśli chcesz użyć typ zwracany void trzeba opisywać metody z @ResponseStatus(value = HttpStatus.OK):

@RequestMapping(value = "/usage") 
@ResponseStatus(value = HttpStatus.OK) 
public void doSomething(HttpServletRequest request, ... 

szczegóły patrz What to return if Spring MVC controller method doesn't return value?

+0

Nice! Tego właśnie mi brakowało. –

1

Twoja metoda nie zwraca niczego, gdy Spring czeka na zwracaną wartość do serializacji za pomocą HttpMessageConverters. Należy raczej coś takiego:

@RequestMapping(value="toto", method="POST") 
@ResponseBody 
public FooBar myController() { 
    // 
    return fooBar; 
}