Tag: 春天

Spring Annotation @Transactional忽略了Kotlin中未经检查的异常

我有JPA模块中的以下方法: @Throws(MyCustomException::class) @Transactional(rollbackOn = arrayOf(MyCustomException::class) fun update(test: Test): UpdatedTestMapped { //modify test try{ myRepository.save(test) }catch(jse: JpaSystemException) { throw MyCustomException() } //rest of code return mapper.map(test) } 在这种情况下,如果编码不正确,从hibernate框架中save()方法应该抛出一个应该被捕获的异常,并抛出MyCustomException 。 但是在运行时,第一个异常被忽略, MyCustomException不会被抛出,剩下的代码和返回语句正在被执行,第一个异常在执行return语句之后被抛出,但是没有被处理。 我有类似的方法只有没有返回语句和异常被抛出和捕获。 我不知道这种情况的原因是什么。 我已经编辑添加stacktrace java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x97\xF0\x9F…' for column 'note' at row 1 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964) ~[mysql-connector-java-5.1.44.jar:5.1.44] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973) ~[mysql-connector-java-5.1.44.jar:5.1.44] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909) ~[mysql-connector-java-5.1.44.jar:5.1.44] at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527) […]

如何修复与Spring安全代理的val字段初始化?

考虑kotlin控制器类: @RestController @RequestMapping("/myPath/") open class MyController { private val s3AsyncClient: S3AsyncClient = S3AsyncClient.builder().build() //… @PostMapping("/indexing") @Secured("ROLE_USER") fun someFunction() { return s3AsyncClient.toString(); } } 这导致NullPointerException。 这是我在调试器中看到的: 但是,当@Secured被删除一切正常。 所以春天的安全代理似乎破坏了kotlin val的初始化。 有没有办法让他们一起工作?

Spring Boot:更改属性占位符的能指

在Spring Boot中更改属性占位符的前缀和后缀最简单的方法是什么? 默认值是@Value("${some.property}") ,但是这在Kotlin中看起来很丑,因为它需要被转义 – $ {something}是Kotlin中String模板的语言特性。

Spring @Autowire不在Kotlin工作

对于我的大学任务,我需要使用注入依赖关系的各种方法,我坚持使用注释autowire,因为它说依赖关系尚未初始化。 我的代码: class TeleporterDeliveryMethod: DeliveryMethod { @Autowired lateinit var teleporter: Teleporter override fun deliver(pkg: Package): Int { teleporter.teleport(pkg) return 0 } } 传送器类: class Teleporter3000 : Teleporter { override fun teleport(pkg: Package) { println("Teleporting package ${pkg.id}…") } } 我也有这个在XML中定义: <bean id="teleporterDeliveryMethod" class="app.delivery.TeleporterDeliveryMethod"/> <bean id="teleporter" class="app.delivery.Teleporter3000" scope="prototype"/> teleport(…)是一个方法teleport(…)的接口teleport(…) 当这个代码运行时,编译说: Exception in thread "main" kotlin.UninitializedPropertyAccessException: lateinit property […]

Kotlin + Spring Boot请求编组

鉴于以下有效载荷: data public class CandidateDetailDTO(val id: String, val stageName: String, val artists: Iterable<ArtistDTO>, val instruments: Iterable<InstrumentDTO>, val genres: Iterable<GenreDTO>, val discoverable: Boolean, val gender: Gender, val involvement: Involvement, val biography: String, var photoURLs: List<URL>, var birthday: Date? = null, var customGenre: String? = null) 。 。 如图所示某些字段允许为空,其他字段则不允许。 当使用Spring Boot调用请求时,如果缺少预期字段,则返回400 – 错误请求。 这不是预料之中,我期望有关的管制员建议适用于: @ControllerAdvice public class […]

kotlin和@Valid Spring注解

我有一个实体: class SomeInfo( @NotNull @Pattern(regexp = Constraints.EMAIL_REGEX) var value: String) { var id: Long? = null } 和控制器方法: @RequestMapping(value = "/some-info", method = RequestMethod.POST) public Id create(@Valid @RequestBody SomeInfo someInfo) { … } @Valid注释不起作用。 看来Spring需要一个默认的无参数构造函数,上面的代码变得像这样丑陋(但工作): class SomeInfo() { constructor(value: String) { this.value = value } @NotNull @Pattern(regexp = Constraints.EMAIL_REGEX) lateinit var value: String var id: […]

kotlin数据类HttpMessageNotReadableException

我正在尝试这个邮递员的代码,但没有任何作品,为什么? 我发送的是: { "name":"front_msel", "gitlabId": "83", "fichierVersion":"VERSION" } 我的弹簧控制器: @RestController @RequestMapping("/projects") class ProjectController(val projectRepository: ProjectRepository) { private val log = LoggerFactory.getLogger(ProjectController::class.java) @PostMapping() fun saveProject(@RequestBody payload: Project): String { log.info("project: '{}'", payload.toString()) return projectRepository.save(payload).gitlabId?:"-1" } } 我得到: { "timestamp": 1505917417221, "status": 400, "error": "Bad Request", "exception": "org.springframework.http.converter.HttpMessageNotReadableException", "message": "JSON parse error: Can not construct instance of […]

Spring数据Elasticsearch与Kotlin数据类的脚本字段导致Jackson序列化问题

当试图从Elasticsearch获取查询结果并将其映射到使用@org.springframework.data.elasticsearch.annotations.ScriptedField批注的Kotlin数据类时,结果实例似乎只用脚本字段创建,而不是其他字段被同时获取,因此导致.MissingKotlinParameterException 。 查询是通过ElasticsearchRepository#search方法完成的,该方法随Spring Data Elasticsearch提供,下面是相关的代码片段: val searchQuery = NativeSearchQueryBuilder() .withQuery(geoDistanceQuery("location").point(53.0, 10.0).distance("100km")) .withScriptField(ScriptField("distance", Script(ScriptType.INLINE, "expression", "doc['location'].arcDistance(params.latitude, params.longitude)", emptyMap()))) .withFilter(boolQuery().must(existsQuery("title"))) .withSort(SortBuilders.geoDistanceSort("location", 53.0, 10.0).order(SortOrder.ASC)) .withPageable(PageRequest.of(0, 10)) .build() val nearby = eventRepository.search(searchQuery) 具有更多上下文的堆栈跟踪: Caused by: com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException: Instantiation of [simple type, class de.nava.demo.events.model.Event] value failed for JSON property id due to missing (therefore NULL) value for creator parameter id which […]

JsonView在Spring + Kotlin中

服务器用JsonView返回空的json: [ { }, { } ] 我只使用Jackson2ObjectMapperBuilder bean来配置jackson : @Bean open fun objectMapperBuilder() = Jackson2ObjectMapperBuilder() .modulesToInstall(KotlinModule()) .propertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES) .featuresToEnable(SerializationFeature.WRITE_EMPTY_JSON_ARRAYS) 控制器: @RestController @RequestMapping("/api/drivers") class DriversController @Autowired constructor(val driverService: DriverService) { @JsonView(Views.Public::class) @RequestMapping("/nearest") fun nearest(): List<Driver> { val drivers = driverService.findNearest(49.437551, 32.025263) return drivers } 驱动程序表实体: @Entity @Table(name = "ct_drivers") data class Driver( @Id @Column(name = "id") […]

Kotlin与Spring DI:lateinit属性尚未初始化

我没有在Kotlin中获得基于Spring的setter依赖注入,因为它总是以“lateinit属性API尚未初始化”的错误消息终止。 我可以将问题减少到以下情况:有一个接口 interface IApi { fun retrieveContent(): String } 这是通过 class Api : IApi { override fun retrieveContent() = "Some Content" } 我想在另一个类中使用依赖注入应该发生的实现: @Component class SomeController { @Autowired lateinit var api: IApi fun printReceivedContent() { print(api.retrieveContent()) } } 但是,应用程序终止与上述错误信息。 我的Spring配置如下所示: @Configuration open class DIConfig { @Bean open fun getApiInstance(): IApi = Api() } 在主函数中加载应用程序上下文并调用方法: fun […]