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

仅在spring boot中验证映像是否存在或不为null?

章昆琦
2023-03-14

我正在尝试使用自定义消息和自定义验证器在Spring boot中验证映像。这是我的验证器文件路径

我只需要知道如何首先检查图像文件是否存在,然后验证它。

我需要提到我的图像可以是空值,在这种情况下,我不应该做验证。

下面是更多说明的示例:

我首先创建了注释,如下所示:

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {ImageFileValidator.class})
public @interface ValidImage {
    String message() default "Invalid image file";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}

我创建了如下验证器:

import org.springframework.web.multipart.MultipartFile;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class ImageFileValidator implements ConstraintValidator<ValidImage, MultipartFile> {

    @Override
    public void initialize(ValidImage constraintAnnotation) {

    }

    @Override
    public boolean isValid(MultipartFile multipartFile, ConstraintValidatorContext context) {

        boolean result = true;

        String contentType = multipartFile.getContentType();
        if (!isSupportedContentType(contentType)) {
            context.disableDefaultConstraintViolation();
            context.buildConstraintViolationWithTemplate(
                    "Only PNG or JPG images are allowed.")
                   .addConstraintViolation();

            result = false;
        }

        return result;
    }

    private boolean isSupportedContentType(String contentType) {
        return contentType.equals("image/png")
                || contentType.equals("image/jpg")
                || contentType.equals("image/jpeg");
    }
}

最后,应用注释如下:

public class CreateUserParameters {

    @ValidImage
    private MultipartFile image;
...
}

自定义验证器的代码在这里:Spring Boot中的文件上载:在最后一条评论中,由Wim Deblauwe进行上载、验证和异常处理。

共有1个答案

林俊晖
2023-03-14

这不是我问题的答案,但如果有人有同样的问题,这是一个临时解决方案。

所以问题是,如果图像为空,我会告诉ImageFileValidator将True发送到ValidImage,然后图像将被验证。这意味着我不必发送错误。

@Override
    public boolean isValid(MultipartFile multipartFile, ConstraintValidatorContext context) {

        boolean result = true;
        String contentType = "";
        try {
            contentType = multipartFile.getContentType();
            if(fileNameLength(multipartFile) == 0) {
                return result;
            }
        } catch(NullPointerException e) {
            e.printStackTrace();
            
        }

if (!isSupportedContentType(contentType)) {
.....

其余代码可以在上面找到。它也可能返回NullException,因此请确保处理它。

 类似资料:
  • 我需要验证一个Map值是否为null,因为我经常使用集合,愿意实现验证Map值的通用方法,所以尝试了这个 有没有人能帮助我更深入地理解这个逻辑。

  • 这个问题现有两种变体: 仅当字段不为空时验证:有条件地处理字符串的解决方案 Hibernate验证-仅在对象不为null时进行验证:唯一的答案演示了该行为,并提示您在手动触发验证时如何处理该行为 我的问题添加了限定符,即在可能为空的对象上使用@Valid时如何执行此操作。 这里的用例是,我们有两个字段,其中一个或另一个需要不为null(包含字段的类上的自定义验证器)。当一个不为null时,我需要它

  • 问题内容: 我有以下内容,其中是是,并且由表示: 我的应用程序中还实现了另一个。 我的问题是,从我的第二个中找出我是否包含特定内容的最佳方法是什么? 我尝试过但没有成功: 问题答案: 为什么不: 而且,如果您必须遍历整个,而不是只寻找一个特定值: 编辑 过去,我用一些Java 8惯用语对此进行了更新。 Java 8流API允许使用更具声明性(并且可以说是优雅的)的方式来处理这些类型的迭代。 例如,

  • 我是一个新的论坛和Appium/Android自动化,我需要帮助,以验证对象是否存在我的应用程序之前,我采取下一个行动。 信息:[BOOTSTRAP][info]返回结果:{“value”:“未找到元素”,“status”:7} 信息:将命令推送到appium工作队列:[“find”,{“strategy”:“name”,“selector”:“John Doe”,“context”:“”,“mu

  • 在给定的json文档中,如何验证是否存在json路径? 我使用的是jayway jsonpath,代码如下 上述代码可能会引发以下异常 通用域名格式。乱穿马路。jsonpath。PathNotFoundException:路径:$['a.b.c']没有结果 为了缓解这种情况,我打算在尝试使用JsonPath读取该路径之前验证该路径是否存在。阅读 作为参考,我看了以下两个文档,但没有真正得到我想要的

  • 当页面第一次加载时,我需要检查中是否有图像,并加载最后一个图像。 否则,我禁用预览按钮,提醒用户按下新图像按钮,并创建一个空数组来放置图像; 问题是中的