在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 表示形式將包含其所有欄位。但是,您可能希望從某些回應中排除敏感字段,例如 cryptoPwd、createdBy 和 UpdatedBy。
實現此目的的一種方法是在傳回物件之前手動將不需要的欄位設為 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>
透過使用 @JsonIgnore 註釋 cryptoPwd 字段,您可以明確地將其從 JSON 回應中排除。
Github 範例: [JsonIgnore 範例](https://github.com/java089/spring-mvc-exclude-fields-json)
以上是如何動態忽略 Spring MVC JSON 回應中的欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!