ホームページ  >  記事  >  Java  >  Spring MVC アプリケーションで Java オブジェクトの JSON 応答からフィールドを動的に除外するにはどうすればよいでしょうか?

Spring MVC アプリケーションで Java オブジェクトの JSON 応答からフィールドを動的に除外するにはどうすればよいでしょうか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-26 16:49:02409ブラウズ

How can you dynamically exclude fields from Java object JSON responses in Spring MVC applications?

Spring MVC を使用した JSON 応答で Java オブジェクトのフィールドを動的に無視する

Spring MVC アプリケーションでは、特定のフィールドを選択的に除外する必要があることがよくあります。フィールドが JSON 応答に含まれないようにします。これは通常、データのプライバシーを維持し、セキュリティ規制を遵守するために必要です。これを実現するために、いくつかのオプションが用意されています。

@JsonIgnoreProperties の使用

最も簡単な解決策は、POJO に @JsonIgnoreProperties アノテーションを付け、必要なフィールド名を指定することです。除外します。例:

<code class="java">@Entity
@Table(name = "user")
@JsonIgnoreProperties({ "encryptedPwd", "createdBy", "updatedBy" })
public class User implements java.io.Serializable {
    // Your getters and setters here...
}</code>

これは、オブジェクトを JSON にシリアル化するときに @JsonIgnoreProperties アノテーションで指定されたフィールドを無視するように Spring MVC に指示します。

Jackson アノテーションで @JsonIgnore を使用する

除外されるフィールドをより詳細に制御したい場合は、jackson-core ライブラリの Jackson アノテーションを使用できます。例:

<code class="java">import com.fasterxml.jackson.annotation.JsonIgnore;

@JsonIgnore
public String getEncryptedPwd() {
    return encryptedPwd;
}</code>

ゲッター メソッドの前に @JsonIgnore を追加すると、JSON 応答にフィールドが含まれなくなります。

カスタム JSON シリアライザーの使用

あるいは、カスタム JSON シリアライザーを作成して、要件に基づいて動的にフィールドを除外するロジックを定義することもできます。 Jackson を使用した例を次に示します。

<code class="java">import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;

public class IgnoreFieldsSerializer extends JsonSerializer<User> {

    private List<String> ignoredFields;

    // Constructor to set the list of ignored fields

    @Override
    public void serialize(User user, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeStartObject();

        for (Field field : user.getClass().getDeclaredFields()) {

            // Check if the field is in the ignored list
            if (!ignoredFields.contains(field.getName())) {
                jsonGenerator.writeFieldName(field.getName());
                jsonGenerator.writeObject(field.get(user));
            }
        }
        jsonGenerator.writeEndObject();
    }
}</code>

その後、REST コントローラーでカスタム シリアライザーを使用できます。

<code class="java">@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/{userId}")
    public ResponseEntity<User> getUser(@PathVariable Integer userId) {
        User user = userService.get(userId);

        ObjectMapper mapper = new ObjectMapper();
        mapper.registerModule(new SimpleModule().addSerializer(User.class, new IgnoreFieldsSerializer(ignoredFields)));
        
        return ResponseEntity.ok(mapper.writeValueAsString(user));
    }
}</code>

ignoredFields パラメーターを通じて無視されるフィールドのリストを提供することで、 JSON 応答内の除外フィールドを動的に制御できます。

以上がSpring MVC アプリケーションで Java オブジェクトの JSON 応答からフィールドを動的に除外するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。