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

在spring boot rest中验证json有效负载,以在未知属性或空属性作为json有效负载的一部分发送时抛出错误

郭均
2023-03-14
{
    "notificationType" : "ISSUER_OTP1ee2asasa",
    "content" : "hi fff this is fff template content for SBI email good and mobile dfdfdfd and remaining balance is 333 and your name is hahaha.",
    "medium" : "EMAIL",
    "asa":"ddddd",
    "":""
}
package com.innoviti.notification.model;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;


@Document(collection = "NotificationTemplate")
@JsonIgnoreProperties(ignoreUnknown=false)

public class NotificationTemplate {
  @JsonCreator
  public NotificationTemplate(@JsonProperty(value="notificationType",required=true)String notificationType, 
      @JsonProperty(value="content",required=true)String content, @JsonProperty(value="medium",required=true)String medium) {
    super();
    this.notificationType = notificationType;
    this.content = content;
    this.medium = medium;
  }

  @Override
  public String toString() {
    return "NotificationTemplate [id=" + id + ", templateId=" + templateId + ", notificationType="
        + notificationType + ", content=" + content + ", medium=" + medium + "]";
  }

  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }

  @Id
  private String id;
  private String templateId;

  public String getTemplateId() {
    return templateId;
  }

  public void setTemplateId(String templateId) {
    this.templateId = templateId;
  }

  private String notificationType;
  private String content;
  private String medium;

  public String getMedium() {
    return medium;
  }

  public void setMedium(String medium) {
    this.medium = medium;
  }

  public String getNotificationType() {
    return notificationType;
  }

  public void setNotificationType(String notificationType) {
    this.notificationType = notificationType;
  }

  public String getContent() {
    return content;
  }

  public void setContent(String content) {
    this.content = content;
  }


}
 @PostMapping(value = "/config", consumes = MediaType.APPLICATION_JSON_VALUE,
      produces = MediaType.APPLICATION_JSON_VALUE)
  public ResponseEntity<NotificationTemplate> configureTemplate(
     @Valid @RequestBody NotificationTemplate notificationTemplate) {
    NotificationTemplate notificationTemplatePersisted = null;

    logger.info(
        "Printing payload of template on server side" + ">>>" + notificationTemplate.toString());
    try {
      validatePayLoad(notificationTemplate);
      notificationTemplatePersisted =
          notificationTemplateService.createNotificationTemplate(notificationTemplate);
    } catch (Exception de) {
      logger.info(String.format("Error in saving template", de.getMessage()));
      throw new RequestNotCompletedException(de.getLocalizedMessage());
    }
    return new ResponseEntity<NotificationTemplate>(notificationTemplatePersisted,
        HttpStatus.CREATED);
  }

共有1个答案

符风畔
2023-03-14

控制这种行为的Jackson属性是fail_on_unknown_properties。在你的情况下,这需要是真的,以获得你描述的行为。

从spring Boot1.2开始,这似乎默认设置为false。

若要将其设置为true,请将此行添加到您的application.properties文件:

spring.jackson.deserialization.fail-on-unknown-properties=true
 类似资料:
  • 控制器 Json有效负载从邮递员发送

  • 我正在创建一个自定义Jackson反序列化器类来将JSON负载映射到一个对象。在我的方法中,我对JSON负载进行了一些检查,以查看是否缺少任何字段或与POJO不一致。 我尝试在方法中抛出异常,方法如下所示: 但是,我不允许在方法中抛出我自己的异常,因为该方法实现了一个接口,我只能抛出和: 在这种情况下,当执行反序列化时,如何验证JSON有效负载?

  • 我有一个巨大的JSON文件作为RESTAPI调用的有效负载发布,用于测试目的。我试过这样的方法: 并将错误获取为: 我可以通过读取文件和传递身体作为字符串运行,但我看到我可以直接传递文件对象,这不起作用。 经过充分的研究,它似乎不起作用。我已经放心地提出了这个问题。https://github.com/jayway/rest-assured/issues/674

  • 我需要使用openapi:3.0.0开发Mule API(4.4运行时)。endpoint是具有以下请求负载的POST: 这是OpenAPI 3.0规范的相关部分: 所以我可以验证单个元素,如“城市”和“国家”不为空,但我如何防止以下请求?(目前未标记为无效:)

  • 如果我创建一个JWT令牌,有效负载中应该有哪些数据?我在网上查找了一些示例和解释,有些人将密码放在JWT中,有些人没有。 现在我正在传递以下数据: 将散列密码放入JWT有效负载感觉不对,因为JWT将被放置在前端应用程序中。它应该在那里吗? 最佳实践是什么?

  • 问题内容: 我只想知道如何确定在无提示推送中要执行的操作: 这是我发送给客户的: 现在的问题是,当我添加以确定静默推送是为了让“订单更新”显示警报通知时。 问题答案: 有一些选择!让我们花点时间了解所有不同的有效负载及其用法。 简单有效载荷 显示在通知中心:是 唤醒应用以执行后台任务:否 带有自定义通知声音的有效负载 显示在通知中心:是 唤醒应用以执行后台任务:否 :在您的应用程序包中添加自定义通