Ошибка, вызванная: com.fasterxml.jackson.core.JsonParseException: нераспознанный токен «Сотрудник»: ожидалось («истина», «ложь» или «ноль») - PullRequest
0 голосов
/ 23 июня 2019

Это мой класс POJPO, представляющий JSON

    @JsonProperty("employee_id")
    private String employeeId;
    private String name;

//  @JsonProperty("birth_date")
//  //@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy")
//  @JsonSerialize(using = LocalDateSerializer.class)
//    private LocalDate birthDate;


    public Employee(String employeeId, String name) {
        super();
        this.employeeId = employeeId;
        this.name = name;
    }

Мой класс производителя. Он отлично работает

@Autowired
private RabbitTemplate rabbitTemplate;

private ObjectMapper objectMapper = new ObjectMapper();

//@Scheduled(fixedRate=500)
public void sendHello (Employee emp ) throws JsonProcessingException
{

      String json = objectMapper.writeValueAsString(emp);
    rabbitTemplate.convertAndSend("course.employee", json );
}

Моя полезная нагрузка в RabbitMQ показывает следующее сообщение Json

headers:    
content_encoding:   UTF-8
content_type:   text/plain
Employee info ->{"name":"Employee 0","employee_id":"emp 0"}

Мой потребительский класс. Это вызывает проблему.

private ObjectMapper objectMapper = new ObjectMapper ();

@RabbitListener(queues="course.employee" )
public void listen( String message ) throws InterruptedException, JsonParseException, JsonMappingException, IOException
{
    Employee emp ;

    emp= objectMapper.readValue(message, Employee.class);

//  Thread.sleep(ThreadLocalRandom.current().nextLong(2000));
}

Сообщение об ошибке ниже

org.springframework.amqp.rabbit.listener.exception.ListenerExecutionFailedException:
 Listener method 'public void
 com.example.hibernatemapping.rabbitmqProducer.HelloRabbitConsumer.listen(java.lang.String)
 throws java.lang.InterruptedException,com.fasterxml.jackson.core.JsonParseException,com.fasterxml.jackson.databind.JsonMappingException,java.io.IOException'
 threw exception    at
 Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.example.hibernatemapping.rabbitmqProducer.Employee` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
 at [Source: (String)"{"name":"Employee 4","employee_id":"emp 4"}"; line: 1, column: 2]
    at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:67) ~[jackson-databind-2.9.8.jar:2.9.8]

1 Ответ

1 голос
/ 23 июня 2019

После того, как вы отредактировали свой вопрос, ситуация отличается от приведенной ниже.Опять же, сообщения об ошибках сообщают вам все, что вам нужно знать:

нет Создатели, такие как конструкция по умолчанию, существуют

Добавить такой конструктор:

public Employee() {
}

Как видно из журнала, вы вводите

Employee info ->{"name":"Employee  0","employee_id":"emp 0"}

Это , а не действительный JSON.

Не делайте этого:

rabbitTemplate.convertAndSend("course.employee","Employee info ->" + json );

Сделайте это:

rabbitTemplate.convertAndSend("course.employee", json);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...