Java 由以下原因导致的错误:com.fasterxml.jackson.core.JsonParseException:无法识别的令牌“Employee”:应为('true'、'false'或'null'))

Java 由以下原因导致的错误:com.fasterxml.jackson.core.JsonParseException:无法识别的令牌“Employee”:应为('true'、'false'或'null')),java,json,spring-boot,rabbitmq,Java,Json,Spring Boot,Rabbitmq,这是我的代表JSON的POJPO类 @JsonProperty("employee_id") private String employeeId; private String name; // @JsonProperty("birth_date") // //@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy") // @JsonSerialize(using = LocalDat

这是我的代表JSON的POJPO类

    @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"}
我的消费者类。这是问题的根源

私有ObjectMapper ObjectMapper=新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]

编辑问题后,情况与下面不同。同样,错误消息会告诉您需要知道的一切:

不存在像默认构造那样的创建者

添加这样一个构造函数:

公职人员{ } 正如日志告诉您的,您的输入是

Employee info ->{"name":"Employee  0","employee_id":"emp 0"}
这不是有效的JSON

不要这样做:

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

rabbitTemplate.convertAndSend("course.employee", json);

您的json可能有问题。您是否可以在listen方法中打印消息以验证它是否是您期望的json。您是否在RabbitListener中记录消息并选中?Listener中消息的值为{name:Employee 1,Employee_id:emp 1}消息的值为Listener为{name:Employee 1,Employee_id:emp 1}好的,你缺少了一个ArgConstructor添加了这个构造函数,实际上我做了同样的修改。rabbitTemplate.convertAndSendcourse.employee,json;我仍然得到了一个错误:无法构造com.example.hibernatemapping.rabbitmqProducer.Employee的实例与默认构造一样,不存在创建者:无法从对象值反序列化在[Source:String{name:Employee 1,Employee_id:emp 1};line:1,column:2]处没有委托或基于属性的创建者这是另一个错误。请编辑您的问题,并包括您使用的确切代码以及由此产生的错误。谢谢我编辑了POJO Employee类和Producer类