java - Spring Boot Pojo 的 Pojo 验证不起作用

标签 java spring spring-boot

我的 Spring Boot 应用程序中有两个 Pojo

Pojo 1:FeedData

代码(我有获取和设置,只是没有在这里显示):

package com.cms.tb.model;

import java.io.Serializable;

import javax.validation.constraints.NotBlank;

import com.fasterxml.jackson.annotation.JsonProperty;

public class FeedData implements Serializable{

    @JsonProperty("feed_id")
    private int feedId;

    @JsonProperty("feed_category_id")
    private int feedCategoryId;

    @JsonProperty("feed_data_json")
    private FeedDataJson feedDataJson;

    @JsonProperty("user_profile")
    private UserProfile userProfile;


}

..在上面的pojo中,还有另一个名为FeedDataJson的Pojo,它具有验证功能。

代码2:FeedDataJson Pojo

package com.cms.tb.model;

import java.util.List;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;

import com.fasterxml.jackson.annotation.JsonProperty;

public class FeedDataJson {

    @NotBlank(message = "feed_title is Mandatory")
    @Size(min = 4, max = 25, message 
    = "feed_title must be between 4 and 25 characters")
    @JsonProperty("feed_title")
    private String feedTitle;

    @NotBlank(message = "feed_body is Mandatory")
    @Size(min = 4, max = 2000, message 
    = "feed_body must be between 10 and 2000 characters")
    @JsonProperty("feed_body")
    private String feedBody;

    @JsonProperty("feed_meta_tags")
    private List<String> feedMetaTags;
}

每当我通过 POSTMAN 发送请求时,FeedDataJson Pojo 中都不会进行验证。

示例请求数据:

{
    "feed_data_json":{
        "feed_title":"",
        "feed_body":"LOL",
        "feed_meta_tags":["m1"]
    },
    "feed_category_id":1,
    "user_profile":{
        "user_id":1
    }
}

这应该引发验证错误,因为 feed_title 为空,对吧?

我的 Controller 代码:

@PostMapping(path="/v1/createfeed")
    public ResponseEntity<String> createFeedController(@Valid @RequestBody FeedData requestData)
            throws TBFeedException, TBFeedDBException, JsonProcessingException {

        // Create ObjectMapper
        ObjectMapper mapper = new ObjectMapper();
        mapper.enable(SerializationFeature.INDENT_OUTPUT);

        String feedDataJson = mapper.writeValueAsString(requestData.getFeedDataJson());
        FeedData newFeedInfo = ITBFeedDAO.createFeed(requestData,feedDataJson);
        newFeedInfo.setFeedDataJson(requestData.getFeedDataJson());

        JsonNode dataNode = mapper.valueToTree(newFeedInfo);

        return new ResponseEntity<String>(generateResponse(dataNode), setHeaders(), HttpStatus.OK);
    }

最佳答案

FeedData 类中的 feedDataJson 属性上使用 @Valid。

@Valid
private FeedDataJson feedDataJson;

对于嵌套属性,您还需要使用@Valid。

关于java - Spring Boot Pojo 的 Pojo 验证不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61287691/

相关文章:

java - 如何将计划任务与还使用 keycloak 提供网页的客户端一起使用?

java - bean 的空属性会被插入到 MongoDB 中吗?

spring - 如何让spring-boot-starter-data-redis删除返回结果

java - 循环键盘输入时出错

java - 你怎么知道要使用什么类型的构造函数?

java - Spring Boot和Hibernate : for org. springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor

java - 如何从IgniteCache中获取某种类型的所有条目的数量?

hibernate - ApplicationEventMulticaster 未初始化 - 在多播事件之前调用 'refresh'

Java 在创建对象时的性能

java - 显示预加载器和阶段之间的延迟