【问题标题】:Default request parameter values inside POJOPOJO 中的默认请求参数值
【发布时间】:2019-08-05 10:03:56
【问题描述】:

我有一个 POJO UserRequest,其中一些字段具有默认值:

@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
public class UserRequest {
  String username;
  @Builder.Default
  String source =  "app";
  @Builder.Default
  Locale locale = Locale.US;
}

和控制器以 POJO 作为 GET 请求参数:

@GetMapping("/getDescription")
public List<String> getDescription(UserRequest userRequest,
                                 @RequestParam(value = "descriptionType" , defaultValue = "DEFAULT") DescriptionType descriptionType {
      return Something.process(userRequest, descriptionType);
}

我的请求参数正确转换为userRequest 对象。

我的问题是,当参数不存在时,默认值不会进入userRequest 对象。它们仍然为空。

例如我的要求

  • host/getDescription?username=test_username&amp;source=app&amp;locale=en_US ,完全填充 userRequest 对象

  • host/getDescription?username=test_username ,具有userRequest 对象的字段源和区域设置为空。

根据我的理解,当请求中缺少参数时,它应该遵循默认值。

我错过了什么?有没有办法让它工作而无需在设置器中手动执行此操作?

这是我迄今为止尝试过的:

  • 我猜 Spring 使用 Jackson 来做转换,所以我尝试添加 @JsonInclude(JsonInclude.Include.NON_NULL)
  • 我尝试将@ModelAttribute 添加到控制器参数中。

【问题讨论】:

    标签: java spring rest serialization


    【解决方案1】:

    【讨论】:

    • 您好,谢谢您的建议。但是您知道现有方法有什么问题吗?不实现HandlerMethodArgumentResolver就不能实现吗?
    • 我觉得你想要的方式和PageableArgumentResolver是一样的
    【解决方案2】:

    原来这是由于 Lombok 的 Builder.default 中的一个已知错误引起的。见:https://github.com/rzwitserloot/lombok/issues/1347

    删除注释,或创建自定义 NoArgsConstructor 都可以。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-01
      • 2017-04-14
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 2019-10-17
      • 1970-01-01
      相关资源
      最近更新 更多