gpt4 book ai didi

java - 尽管在使用 RepositoryRestConfiguration.disableDefaultExposure() 时公开了所有方法,但 405 方法不允许

转载 作者:行者123 更新时间:2023-12-04 13:59:49 25 4
gpt4 key购买 nike

我不想默认公开我的存储库,它看起来像 RepositoryRestConfiguration.disableDefaultExposure()正是我想要的;但是我在拨打 /{respository/{id} 时收到 405 响应.

我已将存储库中的所有方法标记为已公开,并且据我所知,除 FindById 外,所有其他方法都可以正常工作。 .

@RepositoryRestResource(exported = true)
interface MyEntityRepository : PagingAndSortingRepository<MyEntity, Int> {

@RestResource(exported = true)
override fun findAll(sort: Sort): MutableIterable<MyEntity>

@RestResource(exported = true)
override fun findAll(pageable: Pageable): Page<MyEntity>

@RestResource(exported = true)
override fun <S : MyEntity?> save(entity: S): S

@RestResource(exported = true)
override fun findAll(): MutableIterable<MyEntity>

@RestResource(exported = true)
override fun deleteById(id: Int)

@RestResource(exported = true)
override fun deleteAll(entities: MutableIterable<MyEntity>)

@RestResource(exported = true)
override fun deleteAll()

@RestResource(exported = true)
override fun <S : MyEntity?> saveAll(entities: MutableIterable<S>): MutableIterable<S>

@RestResource(exported = true)
override fun count(): Long

@RestResource(exported = true)
override fun findAllById(ids: MutableIterable<Int>): MutableIterable<MyEntity>

@RestResource(exported = true)
override fun delete(entity: MyEntity)

@RestResource(exported = true)
override fun existsById(id: Int): Boolean

@RestResource(exported = true)
override fun findById(id: Int): Optional<MyEntity>

}

@Component
class SpringDataRestCustomization() : RepositoryRestConfigurerAdapter() {

override fun configureRepositoryRestConfiguration(config: RepositoryRestConfiguration?) {
config!!.disableDefaultExposure()
}
}

结果是:
GET /myentities/1
cache-control: no-cache
postman-token: 3d310c2e-2e1c-4587-880d-cc2f79cbb9eb
user-agent: PostmanRuntime/7.2.0
accept: */*
host: localhost:8080
accept-encoding: gzip, deflate

HTTP/1.1 405
status: 405
allow: PUT,PATCH,DELETE,OPTIONS
x-content-type-options: nosniff
x-xss-protection: 1; mode=block
cache-control: no-cache, no-store, max-age=0, must-revalidate
pragma: no-cache
expires: 0
x-frame-options: DENY
content-length: 0
date: Fri, 27 Jul 2018 11:42:25 GMT

将 Spring Boot 与 spring-data-releasetrain.version 一起使用设置为 Kay-SR9 .

是否有我错过的方法或我需要做的其他事情来允许 GET?我没有这个(或任何)存储库的 Controller 。

- - 编辑 - -

经过一番摸索,我想我已经找到了原因,但我不太喜欢我的解决方案;当 Spring 正在寻找 findById它正在寻找类型为 java.lang.Integer 的参数的方法但我的方法被定义为原始 int ; Kotlin 将 ID 类型参数设置为 java.lang.Integer但是 int 的函数参数所以他们不匹配。

更新我的存储库类如下有效,但会导致 Warning:(13, 67) Kotlin: This class shouldn't be used in Kotlin. Use kotlin.Int instead. :
@RepositoryRestResource(exported = true)
interface MyEntityRepository : PagingAndSortingRepository<MyEntity, java.lang.Integer> {

...

@RestResource(exported = true)
override fun findById(id: java.lang.Integer): Optional<MyEntity>

}

--- 编辑 2 ---

我目前正在使用下面的代码;但是 Kotlin 不认为我的方法会覆盖继承的方法(如果我将 overrides 关键字重新添加进去,它将无法编译)。
@RepositoryRestResource(exported = true)
interface MyEntityRepository : PagingAndSortingRepository<MyEntity, Int?> {

...

@RestResource(exported = true)
fun findById(id: Int?): Optional<MyEntity>

}

最佳答案

@jebbench 的编辑解决了 GET /{entity}/{id} 的问题.另外,我必须这样做才能删除:

    @RestResource(exported = true)
fun deleteById(id: Int?): Optional<MyEntity>

关于java - 尽管在使用 RepositoryRestConfiguration.disableDefaultExposure() 时公开了所有方法,但 405 方法不允许,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51557296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com