#kotlin #spring-webflux
Вопрос:
Я создаю класс ApUtils . Определите два метода в этом классе . Я хочу использовать эти два метода в своем классе обслуживания внутри функции map с помощью ссылки на метод ,но я получаю не исключенную ошибку при вызове этих двух методов service.kt
package com.nilmani.reactivespringdemo.services
import com.nilmani.reactivespringdemo.Utils.AppUtils
import com.nilmani.reactivespringdemo.dto.ProductDto
import com.nilmani.reactivespringdemo.entity.Product
import com.nilmani.reactivespringdemo.repository.ProductRepository
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service
import reactor.core.publisher.Flux
import reactor.core.publisher.Mono
@Service
class ProductService {
@Autowired
private lateinit var productRepository: ProductRepository
fun getProduct():Flux<ProductDto>{
return productRepository.findAll().map(obj: AppUtils -> obj.entityToDto(product))
}
fun getProduct(id:String):Mono<ProductDto>{
return productRepository.findById(id).map{ obj: AppUtils, product: Product -> obj.entityToDto(product) }
}
}
Приложения.кт
package com.nilmani.reactivespringdemo.Utils
import com.nilmani.reactivespringdemo.dto.ProductDto
import com.nilmani.reactivespringdemo.entity.Product
import org.springframework.beans.BeanUtils
class AppUtils {
fun entityToDto(product: Product):ProductDto{
val productDto = ProductDto()
BeanUtils.copyProperties(product,productDto)
return productDto
}
fun dtoToEntity(productDto: ProductDto):Product{
val product = Product()
BeanUtils.copyProperties(productDto,product)
return product
}
}
Как вызвать эти две функции в моем классе обслуживания, используя ссылку на метод
Ответ №1:
Если вы перейдете AppUtils
на синглтон, используя object
ключевое слово Kotlin:
object AppUtils { ... }
затем вы можете использовать ссылки на методы, например:
fun getProduct(id:String) = productRepository.findById(id).map(AppUtils::entityToDto)