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

Spring Boot@Request estBody将空值绑定到默认值?

袁运良
2023-03-14

我有一个Spring Boot服务,它为POST请求正文使用自定义POJO类。当客户端将其中一个字段传递为null时,我希望该值设置为0。

@Data
public class CardAnswer {
    private Integer answerId = 0; //should always be 0 and never set to null
    private String value;
}

由以下控制器使用:

@RequestMapping(value = "/{category}", method = RequestMethod.POST)
    public SalesPulseMResponse updateSecurity(@PathVariable(value = SalesedgeConstants.CATEGORY)
                                              @RequestBody CardAnswer requestBody) {

        return fooService.updateFieldsByCategory(category, requestBody);
    }

Spring boot将为我处理从JSON到Card答案的数据绑定,但是每当应答ID作为null传递时,我希望它保留0。有没有正确的方法来做到这一点,或者我必须自己解析类并设置值?目前,如果客户端在其请求JSON中没有传递此字段,它将保留默认值,但是,我希望即使传入的null值也保留默认值。

共有2个答案

赵君植
2023-03-14

您可以使用@JsonIgnore

@Data
public class CardAnswer {
    @JsonIgnore
    private Integer answerId = 0;
    private String value;
}
竺承望
2023-03-14

ints有这个属性,所以:

@Data
public class CardAnswer {
    private int answerId;
    private String value;
}

例子:

@Data
public class CounterRequest {
    private final int int1;
    private final int int2;
}

@Data
public class CounterResult {
    private final int value;
}

@RestController
@RequestMapping(
        produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
        consumes = MediaType.APPLICATION_JSON_VALUE)
public class CounterRestController {
    public static final String ADD_URL = "/counter/add";
    
    @RequestMapping(value = ADD_URL,
            method = RequestMethod.POST)
    public CounterResult add(@RequestBody @Valid
            CounterRequest counterRequest) {
        return new CounterResult(counterRequest.getInt1() + counterRequest.getInt2());
    }
}

运行时间:

$ curl -X POST -H "Content-Type: application/json"  --data "{\"int1\":null,\"int2\":2}" localhost:8080/counter/add
{"value":2}
$ curl -X POST -H "Content-Type: application/json"  --data "{\"int1\":1,\"int2\":2}" localhost:8080/counter/add
{"value":3}
 类似资料:
  • 我的jsp表单中有一些数字字段(但不是强制的),例如kkqty、sogoqty和sesaqty。因此,当用户没有在这些字段中输入任何内容时,我在控制器端接收到null,因此在保存这些表单数据时会出现Null属性异常 我的POJO(OutletInfo.java) 我的控制器 在控制器中,当我尝试打印所有数值字段时,我在这里收到空值,因此无法保存。 我需要将null转换为默认值0.0,我知道我需要检

  • 问题内容: 我有一个模板绑定,使用Angular的日期过滤器显示名为“ date”的模型属性,该属性是一个日期。 到目前为止,一切都很好。但是,目前,如果日期字段中没有值,则绑定不显示任何内容。但是,如果没有日期,我希望显示字符串“ Various”。 我可以使用二进制运算符获取基本逻辑: 但是我无法使其与日期过滤器一起使用: 如何在日期过滤器旁边使用二元运算符? 问题答案: 原来我要做的就是将表

  • 如何将MVVM值绑定到dropdownlist?下面的输入元素运行良好

  • 我有以下剑道下拉列表: 然后,我的javascript可观察绑定: 当试图添加事件:{Change: eventLabelChange}到我的html dropDownlist元素中的数据绑定时,我得到处理程序没有定义错误,当它显然是(有趣的是,我有另一个dropDownlist与此页面上的相同类型的绑定完美地工作与变化事件罚款...)。 而且我无法获得默认值。我曾尝试在绑定后直接将dropdow

  • 注:内容翻译自官网文档 Language Guide (proto3) 中的 Default Values 一节 当消息被解析时, 如果被编码的消息没有包含特定的简单元素, 被解析的对象对应的字段被设置为默认值. 默认值是和类型有关的: 对于strings, 默认值是空字符串(注, 是"", 而不是null) 对于bytes, 默认值是空字节(注, 应该是byte[0], 注意这里也不是null)

  • 问题内容: 我想有一个可选参数,如果仅存在未指定值的标志,则默认为一个值,但是存储用户指定的值,而不是如果用户指定一个值,则存储默认值。是否已经有可用于此的措施? 一个例子: 我可以创建一个动作,但想查看是否存在执行此操作的方法。 问题答案: 表示0或1参数 当参数为0时设置默认值 将参数转换为int 如果即使未指定,也要设置为1 ,则包括。也就是说, 然后