枚举字段显示STRING而不是ORDINAL

时间:2017-01-10 18:16:47

标签: spring hibernate spring-mvc enums

我目前在Spring MVC设计应用程序中使用Hibernate,该应用程序接收数据并将其存储到MySQL数据库中。我有相互映射的模型和枚举的混合物。一切正常,存储到数据库中的数据是正确的(它存储枚举ORDINAL值)。

但是,当我使用CrudRepository中的findAll()方法输出结果时,结果显示正确的枚举值,但是以STRING形式而不是ORDINAL形式。关于我可以实现什么的任何想法,或者这是怎么回事?

下面是一小段代码,展示了我到目前为止所拥有的内容:

Enum(标记为" Cars"):

FORD, 
TOYOTA, 
CHEVY

POJO代码段(标有"经销商"):

@Enumerated(EnumType.ORDINAL)
private Cars carType;
//getters and setters

DAO(标记为" DealershipDAO"):

public interface DealershipDao extends CrudRepository<Dealership, Integer> {
}

控制器:

@Autowired
private DealershipDao dao;

@RequestMapping(value="/dataLoad")
public String dataLoad() {
    Dealership dealer = new Dealership();
    dealer.setCarType(Cars.FORD);


    dao.save(dealer);

    return "success";
}

@RequestMapping(value="/findEverything", produces = MediaType.APPLICATION_JSON_VALUE, method = RequestMethod.GET)
public Iterable<Dealership> findAll() {
    return dao.findAll();
}

现在,如果我使用MySQL编辑器查看数据,经销商表会显示FORD的枚举ORDINAL值(在我调用/ dataLoad请求之后)。但是当我调用/ findEverything请求时,它会显示String,FORD,而不是值。

1 个答案:

答案 0 :(得分:1)

杰克逊如何将枚举转换为JSON与JPA无关。你需要告诉杰克逊如何序列化你的枚举。例如,使用JsonFormat annotation