ホームページ  >  記事  >  Java  >  Spring MVC JSON 応答のフィールドを動的に無視する方法は?

Spring MVC JSON 応答のフィールドを動的に無視する方法は?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-26 15:47:02495ブラウズ

How to Dynamically Ignore Fields in Spring MVC JSON Responses?

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

Spring MVC では、シリアル化時に Java オブジェクトからの特定のフィールドを動的に無視する必要があるシナリオが発生する場合があります。それらは JSON として保存されます。これは、特定のクライアントまたはエンドポイントの機密データまたは無関係なデータを含むオブジェクトを処理する場合に特に便利です。

Hibernate の @Entity アノテーションが付けられた次の Java モデル クラスを考えてみましょう。

<code class="java">@Entity
@Table(name = "user", catalog = "userdb")
@JsonIgnoreProperties(ignoreUnknown = true)
public class User implements java.io.Serializable {

    // ... Class definition omitted for brevity
}</code>

Spring MVC 内コントローラーの場合、データベースから User オブジェクトを取得し、JSON 応答として返します。

<code class="java">@Controller
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/getUser/{userId}", method = RequestMethod.GET)
    @ResponseBody
    public User getUser(@PathVariable Integer userId) throws Exception {

        User user = userService.get(userId);
        user.setCreatedBy(null);
        user.setUpdatedBy(null);
        return user;
    }
}</code>

デフォルトでは、User オブジェクトの JSON 表現にはそのすべてのフィールドが含まれます。ただし、encryptedPwd、createdBy、updatedBy などの機密フィールドを特定の応答から除外したい場合があります。

これを実現する 1 つの方法は、オブジェクトを返す前に不要なフィールドを手動で null に設定することです。ただし、この方法はエラーが発生しやすく、非効率的になる可能性があります。

より洗練された解決策は、@JsonIgnoreProperties アノテーションを使用することです。注釈内のプロパティ名を使用して、無視するフィールドを指定できます。

<code class="java">@Entity
@Table(name = "user", catalog = "userdb")
@JsonIgnoreProperties(ignoreUnknown = true, value = {"encryptedPwd", "createdBy", "updatedBy"})
public class User implements java.io.Serializable {

    // ... Class definition omitted for brevity
}</code>

この注釈を配置すると、フィールド encryptedPwd、createdBy、および updatedBy が JSON 表現から除外されます。

または、個々のフィールドで @JsonIgnore アノテーションを使用できます。

<code class="java">@Entity
@Table(name = "user", catalog = "userdb")
@JsonIgnoreProperties(ignoreUnknown = true)
public class User implements java.io.Serializable {

    @JsonIgnore
    private String encryptedPwd;
    private String createdBy;

    // ... Class definition omitted for brevity
}</code>

encryptedPwd フィールドに @JsonIgnore アノテーションを付けることで、JSON 応答から明示的に除外します。

Github の例: [JsonIgnore の例](https://github.com/java089/spring-mvc-exclude-fields-json)

以上がSpring MVC JSON 応答のフィールドを動的に無視する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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