Простой загрузочный фильтр Spring не работает должным образом

Я пытаюсь получить доступ к конечной точке приложения весенней загрузки с некоторыми примененными к нему фильтрами, но фильтры не работают должным образом. Мне нужна помощь в отношении этой проблемы. Я предоставляю подозрительные вещи ниже.

package com.ronit.Restfulwebservice.filtering;

import java.util.Arrays;
import java.util.List;

import org.springframework.http.converter.json.MappingJacksonValue;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.fasterxml.jackson.databind.ser.FilterProvider;
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;

@RestController
public class FilteringController {
    @GetMapping("/filtering")
    public MappingJacksonValue filtering() {
        
        SomeBean someBean = new SomeBean("value1", "value2", "value3");
        
        MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(someBean);
        
        SimpleBeanPropertyFilter filter = 
                SimpleBeanPropertyFilter.filterOutAllExcept("field1","field3");
        
        FilterProvider filters = 
                new SimpleFilterProvider().addFilter("SomeBeanFilter", filter);
        
        mappingJacksonValue.setFilters(filters);
        
        return mappingJacksonValue;
    }

    @GetMapping("/filtering-list")
    public MappingJacksonValue filteringList() {
        
        List<SomeBean> list = Arrays.asList(new SomeBean("value1", "value2", "value3"),
                new SomeBean("value4", "value5", "value6"));
        
        MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(list);
        
        SimpleBeanPropertyFilter filter = 
                SimpleBeanPropertyFilter.filterOutAllExcept("field2");
        
        FilterProvider filters = 
                new SimpleFilterProvider().addFilter("SomeBeanFilter", filter);
        
        mappingJacksonValue.setFilters(filters);
        
        return mappingJacksonValue;
    }
}

Это класс SomeBean

package com.ronit.Restfulwebservice.filtering;

import com.fasterxml.jackson.annotation.JsonFilter;
//@JsonIgnoreProperties({"field1"})
public class SomeBean {
    private String field1;
    //@JsonIgnore
    @JsonFilter("SomeBeanFilter")
    //@JsonFilter("ListFilter")
    private String field2;
    private String field3;

    public SomeBean(String field1, String field2, String field3) {
        super();
        this.field1 = field1;
        this.field2 = field2;
        this.field3 = field3;
    }

    public String getField1() {
        return field1;
    }

    public String getField2() {
        return field2;
    }

    public String getField3() {
        return field3;
    }

    @Override
    public String toString() {
        return "SomeBean [field1 = " + field1 + ", field2 = " + field2 + ", field3 = " + field3 + "]";
    }
}

Это класс приложения

package com.ronit.Restfulwebservice;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class RestfulWebServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(RestfulWebServiceApplication.class, args);
    }

}

Файл application.properties

logging.level.org.springframework=debug

Файл pom.xml

<?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0"
    xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.1</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.ronit</groupId>
    <artifactId>Restful-web-service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Restful-web-service</name>
    <description>My first rest api </description>
    <properties>
        <java.version>20</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-hateoas</artifactId>
        </dependency>
        <!--<dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
            <version>2.1.0</version>
            </dependency>-->
            <!-- This dependency below converts json file to xml format without this dependency
             xml instead of json is given to the browser and the browser displays the same -->
        <!--<dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
        </dependency>-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Ответ Json для конечной точки http://localhost:8080/filtering-list

[
{
"field1": "value1",
"field2": "value2",
"field3": "value3"
},
{
"field1": "value4",
"field2": "value5",
"field3": "value6"
}
]

Ответ Json для конечной точки http://localhost:8080/filtering

{
"field1": "value1",
"field2": "value2",
"field3": "value3"
}

Я следую курсу udemy. Я сделал то же самое в учебнике и следовал пошаговому руководству на github и построил то же самое, но это не работает. Я искал в Интернете решения, но ничего не нашел, пожалуйста, помогите мне с этой проблемой. Если требуется более подробная информация о чем-либо, пожалуйста, спросите заранее спасибо

Я не могу понять, где я сделал ошибку, если я получу помощь как можно скорее, это спасет мой день, пожалуйста, подумайте о помощи. Хорошего дня, заранее спасибо, если кто-нибудь поможет

Ronit Pandey 22.07.2023 20:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

На основании предоставленного кода кажется, что вы используете MappingJacksonValue и SimpleBeanPropertyFilter от Jackson для применения динамической фильтрации к ответу JSON. Код выглядит правильно, и ответ для конечной точки /filtering-list выглядит нормально. Однако проблема может быть связана с конфигурацией или использованием фильтра.

Ниже я предлагаю несколько моментов для проверки:

1. Убедитесь, что bean-компонент ObjectMapper правильно настроен в приложении. Обязательно зарегистрируйте FilterProvider в bean-компоненте ObjectMapper, чтобы он распознал фильтр.

2. Убедитесь, что класс SomeBean снабжен аннотацией @JsonFilter("SomeBeanFilter"), которая у вас уже есть правильно.

3. Проверьте наличие других конфигураций фильтров или перехватчиков, которые могут повлиять на ответ JSON.

4. Убедитесь, что вы обращаетесь к правильному URL-адресу конечной точки /filtering.

Пример настройки бина:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ser.FilterProvider;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;

@Configuration
public class JacksonConfig {
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        FilterProvider filters = new SimpleFilterProvider().addFilter("SomeBeanFilter",
                SimpleBeanPropertyFilter.serializeAllExcept("field2"));
        objectMapper.setFilterProvider(filters);
        return objectMapper;
    }
}

Если вы предприняли описанные выше шаги, но проблема не устранена, я рекомендую проверить наличие других пользовательских конфигураций, фильтров или перехватчиков, которые могут мешать процессу фильтрации. Кроме того, проверьте наличие журналов ошибок или исключений при доступе к конечной точке /filtering.

Я проверил все, как вы сказали, но я не смог найти ни одной проблемы, но она сохраняется. Когда я пытаюсь использовать ObjectMapper вместо этого, я получаю пустой ответ json.

Ronit Pandey 25.07.2023 11:02

Я нашел ошибку в классе someBean. Я случайно поместил «someBeanFilter» в field2 a String вместо класса, я поместил его в класс, и все работает нормально

Ronit Pandey 25.07.2023 11:17

Я обнаружил свою ошибку, я поместил аннотацию @JsonFilter("someBeanFilter") в свойство String field2 вместо class . Поставил на класс и теперь все работает нормально.

Другие вопросы по теме