杰克逊试图将整数转换为String

时间:2017-06-29 11:08:12

标签: json spring spring-boot jackson

我有一个非常基本的Spring Boot应用程序,其中包含。-data-jpa,。-data-rest和。-web依赖项。 在我的模型中,有一个实体Game,它包含一个Integer属性homeGameSwitch。 当我通过REST调用获取资源时,我得到了这个异常:

  

.w.s.m.s.DefaultHandlerExceptionResolver:无法写入HTTP   信息:   org.springframework.http.converter.HttpMessageNotWritableException:   无法编写JSON:java.lang.Integer无法强制转换为   java.lang.String中;嵌套异常是   com.fasterxml.jackson.databind.JsonMappingException:java.lang.Integer   无法强制转换为java.lang.String(通过引用链:   org.springframework.data.rest.webmvc.json.PersistentEntityJackson2Module $ PersistentEntityResourceSerializer $ 1 [&#34;内容&#34;] - &GT; com.coli.stripebackend.model.Game [&#34; homeGameSwitch&#34;])< / p>

我觉得杰克逊无法处理一个整数,这很奇怪。 我可以做些什么来阻止这个错误吗?

实体:

@Entity
public class Game {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    private Integer homeGameSwitch;

    public Integer getHomeGameSwitch() {
        return homeGameSwitch;
    }

DAO:

@Repository("gameDao")
public interface GameDao extends JpaRepository<Game, Integer> {}

服务:

@Service("gameService")
public class GameServiceImpl implements GameService {

    @Autowired
    private GameDao gameDao;

    @Override
    public Game retrieveGameById(Integer id) throws Exception {
        Optional<Game> optionalGame = gameDao.findById(id);
        return optionalGame.get();
    }

调用localhost时发生错误:8080 / game / 7

2 个答案:

答案 0 :(得分:0)

问题与Spring Boot的版本有关。我使用的是版本2.0.0.M2,其中似乎有一个错误。 使用1.5.4.RELEASE版时,我没有问题。

答案 1 :(得分:0)

这是对未来来这里的读者的警告:有很多触发该异常的方法:Jackson serialization exception when trying to serialize LocalDateTime

中收集了一些类似的异常。

似乎我碰到了获得完全相同的异常的另一种方法:拥有一个像这样的类:

class Foo extends HashMap<String, String> {
  public long bar;
}

并尝试对其进行序列化。