当前位置: 首页 > 知识库问答 >
问题:

(Spring boot)如何忽略rest控制器中请求主体的某些字段

云鸿达
2023-03-14

假设rest控制器类中有一个注册方法,如下所示。

  @PostMapping("/signup")
  fun authenticateSignUp(@RequestBody command: RegisterUserCommand): CompletableFuture<String> {
    return commandGateway.send<String>(command)
  }

所以它需要请求主体,即RegisterUserCommand。

data class RegisterUserCommand(
  val userId: String,
  val balance: BigDecimal,
  val username: String,
  private val email: String,
  private val password: String
)

我想忽略一些字段,比如userId,balance,这样我以后就可以在控制器中像这样生成它

@PostMapping("/signup")
fun authenticateSignUp(@RequestBody request: RegisterUserCommand): CompletableFuture<String> {
  val command = request.copy(userId = ObjectId.get().toHexString(), balance = BigDecimal.ZERO)
  return commandGateway.send<String>(command)
}

是否有任何注释可以忽略此字段,这样即使我没有在请求正文中放置userId和balance,它也不会返回错误的请求

共有2个答案

尹俊贤
2023-03-14

我想你可以用将变量标记为可空 操作员。但我建议使用DTO。

data class RegisterUserDto(
  val username: String,
  private val email: String,
  private val password: String
)

苏健柏
2023-03-14

正如@flaxel正确指出的,您可以使用从静态编程语言,我相信添加@JvmOverload构造函数到它。

但是,在我看来,使用DTO无疑是最好的解决方法。控制器的输入不应该是命令,而应该是带有感兴趣字段的DTO。使用增强值构建命令的方式不应受到影响。

在本例中,您可能会遇到这样的情况(还添加了@TargetAggregateIdentifier,因为您可能错过了它):

data class RegisterUserCommand(
  @TargetAggregateIdentifier
  val userId: String,
  val balance: BigDecimal,
  val username: String,
  private val email: String,
  private val password: String
)

...

data class RegisterUserDto(
  val username: String,
  private val email: String,
  private val password: String
)

...

@PostMapping("/signup")
fun authenticateSignUp(@RequestBody request: RegisterUserDto): CompletableFuture<String> {
  val command = new RegisterUserCommand // build the command the way you want it
  return commandGateway.send<String>(command)
}
 类似资料:
  • 我有Solr 5.3.1,需要查询除某些字段之外的所有字段(我需要在某些字段中搜索而不是以这种方式检索字段[/?q=query&fl=field1,field2,field3]) 2.[以下解决方案有效,但需要更多时间] 3.我在data-config.xml中设置了indexed=“false”,它只忽略此字段中的搜索,但是当我搜索所有字段http://localhost:8983/solr/t

  • 我正在使用Java和Spring构建一个RESTAPI,我需要在我的控制器中处理一个POST请求,但我需要从该请求中提取主体,它是一个JSON,也是该请求的“来源”, 我有几个问题:首先是如何获取该请求的来源(我猜是在标题中移动的url?),是否有与@RequestBody类似的注释?。 我的第二个问题是,在这种post方法中,通常应该返回什么对象作为响应。

  • 我有一个用@ControllerAdvice注释的类和用@ExceptionHandler注释的方法来处理服务代码引发的异常。在处理这些异常时,我希望获得@RequestBody,它是请求POST操作的一部分。 我尝试为发送的请求创建POJO类,并尝试在异常处理程序类中检索,但它返回null。 遵循本查询中给出的相同解决方案~如何在@ExceptionHandler(Spring REST)中获取

  • 我有一堆控制器,比如:

  • 我想知道是否可以使用此方法忽略字段,因为我有一个要忽略的字段列表,在同一个类中,那么我该如何做呢? 我正在使用 谢谢

  • 项目中经常会生成一些Git系统不需要追踪(track)的文件。典型的是在编译生成过程中 产生的文件或是编程器生成的临时备份文件。当然,你不追踪(track)这些文件,可以 平时不用"git add"去把它们加到索引中。 但是这样会很快变成一件烦人的事,你发现 项目中到处有未追踪(untracked)的文件; 这样也使"git add ." 和"git commit -a" 变得实际上没有用处,同时