小编Ter*_*sen的帖子

反序列化时如何防止 Jackson 将 kotlin.Boolean 参数设置为 false

如果序列化源(例如 json 对象)不包含该字段,我如何指示 Jackson 不要自动反序列化kotlin.Boolean参数false

请参阅当前示例:

import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper

data class Test(
    var param1: String,
    var param2: Boolean
)

fun main() {
    val mapper = jacksonObjectMapper()
    // passes, param2 is set to false, why isnt exception thrown?
    val test1 = mapper.readValue("{\"param1\": \"bah\"}", Test::class.java)
    // throws com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException
    val test2 = mapper.readValue("{\"param2\": true}", Test::class.java)
}
Run Code Online (Sandbox Code Playgroud)

在我没有给布尔参数赋值的第一种情况下,如何让 jackson 抱怨异常?

我对此很感兴趣,因为如果客户端没有为布尔参数赋值,我希望我的 API 停止并抱怨。我不希望它在发生这种情况时简单地设置为 false。

谢谢!

jackson kotlin json-deserialization

5
推荐指数
1
解决办法
1044
查看次数

JOIN FETCH 查询未在 Spring DataJpaTest 中获取延迟集合

背景

你好!我正在尝试编写一个测试来检查 JOIN FETCH 查询是否正确获取惰性集合。我正在一个简单的 Spring Boot 2.1.7 项目中尝试这个,其中 h2 有数据源,并且加载了 spring-boot-starter-data-jpa 。测试是使用 Junit4 和 assertJ 进行的,我认为这并不重要。

当我使用时@DataJpaTest,集合在这里返回空,而不是例如@SpringBootTest,我不明白为什么。

实体和存储库

我有两个简单的实体,ClassroomPerson。一个教室可以容纳多人。这是在课堂上定义的:

    @OneToMany(mappedBy = "classroom", fetch = FetchType.LAZY)
    private Set<Person> persons = new HashSet<>();
Run Code Online (Sandbox Code Playgroud)

在 person 类中:

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "classroom_id")
    private Classroom classroom;
Run Code Online (Sandbox Code Playgroud)

在 中ClassRoomRepository,我定义了一个应该急切地获取教室中的人员的方法:

    @Query("SELECT DISTINCT c FROM Classroom c JOIN FETCH c.persons WHERE c.id = :classroomId")
    Classroom getClassRoom(@Param("classroomId") Long classRoomId);
Run Code Online (Sandbox Code Playgroud)

考试

@RunWith(SpringRunner.class)
@DataJpaTest
public class ClassroomTest{
    @Autowired …
Run Code Online (Sandbox Code Playgroud)

hibernate spring-boot

4
推荐指数
1
解决办法
1589
查看次数