При сериализации объекта Hibernate генерируется странное исключение Джексона

Джексон выдает странное исключение, которое я не знаю, как исправить. Я использую Spring, Hibernate и Jackson.

Я уже считал, что ленивая загрузка вызывает проблему, но я принял меры, чтобы указать Джексону НЕ обрабатывать различные свойства следующим образом:

@JsonIgnoreProperties({ "sentMessages", "receivedMessages", "educationFacility" })
public class Director extends UserAccount implements EducationFacilityUser {
   ....
}

Я сделал то же самое и для всех других подклассов UserAccount.

Возникает исключение:

org.codehaus.jackson.map.JsonMappingException: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS) ) (through reference chain: java.util.ArrayList[46]->jobprep.domain.educationfacility.Director_$$_javassist_2["handler"])
    at org.codehaus.jackson.map.ser.StdSerializerProvider$1.serialize(StdSerializerProvider.java:62)
    at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:268)
    at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:146)
    at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:118)
    at org.codehaus.jackson.map.ser.ContainerSerializers$IndexedListSerializer.serializeContents(ContainerSerializers.java:236)
    at org.codehaus.jackson.map.ser.ContainerSerializers$IndexedListSerializer.serializeContents(ContainerSerializers.java:189)
    at org.codehaus.jackson.map.ser.ContainerSerializers$AsArraySerializer.serialize(ContainerSerializers.java:111)
    at org.codehaus.jackson.map.ser.StdSerializerProvider._serializeValue(StdSerializerProvider.java:296)
    at org.codehaus.jackson.map.ser.StdSerializerProvider.serializeValue(StdSerializerProvider.java:224)
    at org.codehaus.jackson.map.ObjectMapper.writeValue(ObjectMapper.java:925)
    at org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.writeInternal(MappingJacksonHttpMessageConverter.java:153)

Предложения о том, как я можно получить дополнительную информацию, чтобы узнать, что вызывает это? Кто-нибудь знает, как это исправить?

EDIT: Я обнаружил, что getHander () и другие методы get * () существуют для прокси-объекта. GRR !! Могу ли я как-нибудь сказать Джексону не обрабатывать ничего на прокси-сервере, или я решил? Это действительно странно, потому что метод, выдающий JSON, дает сбой только при определенных обстоятельствах, а не постоянно. Тем не менее, это из-за методов get * () прокси-объекта.

Кроме того: прокси - это зло. Они нарушают работу Jackson, equals () и многие другие части обычного программирования на Java. using System.Windows.Forms; классный тест {static void Main () {Console.WriteLine ("тест"); MessageBox.Show ("...

Чтобы сразу застрять, очень простой пример:

using System;
using System.Windows.Forms;

class test
{ 
    static void Main()
    { 
        Console.WriteLine("test");
        MessageBox.Show("test");
    }
}

Если я скомпилирую это с параметрами по умолчанию (используя csc в командной строке), как и ожидалось, он будет компилироваться в консоль Кроме того, поскольку я импортировал System.Windows.Forms , он также покажет окно сообщения.

Теперь, если я использую параметр / target: winexe , который я Думаю, это то же самое, что выбрать Приложение Windows в параметрах проекта, как и ожидалось, я увижу только окно сообщения, но не буду выводить данные в консоль.

(Фактически, когда оно запускается из командной строки, я может выдать следующую команду еще до того, как приложение будет завершено).

Итак, мой вопрос - я знаю, что вы можете получить "окна" / формы вывода из консольного приложения, но есть ли способ показать консоль из приложения Windows?

114
задан Wil 18 March 2015 в 23:00
поделиться