@JsonIgnore返回结果忽略默写字段,请求又不想忽略这些字段

@JsonIgnore 注解是用来注解那些在后台返回时 用来屏蔽某些字段的,如在返回user实体时,就不想返回password 字段,只需要在这个字段上加上@JsonIgnore 注解即可
如图
在这里插入图片描述
但是问题来了,当在新增用户的时候password字段也被忽略了,导致密码不是期望值,出现在这个原因也是因为我们再password上加上@JsonIgnore 字段导致的
那么有没有一种方法既可以满足响应有可以满足请求呢?答案肯定是有的
如图:
在这里插入图片描述
我们只需要在对应的get,set方法上分别加上这两个注解即可:@JsonIgnore 返回时忽略,@JsonProperty 请求时注入
就能满足我们的需求了

在Java若依框架中实现多表联查并让关联表返回特定字段,可借助Spring Data JPA的 `@Query` 注解执行原生SQL查询。以下是具体步骤和示例代码: ### 定义Repository接口 在Repository接口里定义原生SQL查询方法,通过 `@Query` 注解指定原生SQL语句,同时设置 `nativeQuery = true`。 ```java import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; import java.util.List; public interface UserOrderRepository extends CrudRepository<User, Long> { @Query(value = "SELECT u.name, o.order_number, o.amount " + "FROM users u " + "INNER JOIN orders o ON u.id = o.user_id " + "WHERE o.status = :status", nativeQuery = true) List<Object[]> findUserOrderDetailsByStatus(@Param("status") String status); } ``` 上述代码借助 `@Query` 注解指定原生SQL,实现用户表与订单表的联查,返回特定字段返回结果为对象数组列表,每个数组对应一行查询结果中的字段值。 ### 结果映射 使用原生SQL时,可结合 `SqlResultSetMapping` 或DTO投影来提升类型安全性。以下是使用DTO投影的示例: #### 定义DTO类 ```java public class UserOrderDTO { private String name; private String orderNumber; private double amount; public UserOrderDTO(String name, String orderNumber, double amount) { this.name = name; this.orderNumber = orderNumber; this.amount = amount; } // Getters and Setters public String getName() { return name; } public void setName(String name) { this.name = name; } public String getOrderNumber() { return orderNumber; } public void setOrderNumber(String orderNumber) { this.orderNumber = orderNumber; } public double getAmount() { return amount; } public void setAmount(double amount) { this.amount = amount; } } ``` #### 修改Repository接口 ```java import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; import java.util.List; public interface UserOrderRepository extends CrudRepository<User, Long> { @Query(value = "SELECT new com.example.dto.UserOrderDTO(u.name, o.order_number, o.amount) " + "FROM users u " + "INNER JOIN orders o ON u.id = o.user_id " + "WHERE o.status = :status", nativeQuery = false) List<UserOrderDTO> findUserOrderDetailsByStatus(@Param("status") String status); } ``` 上述代码通过DTO投影将查询结果映射到 `UserOrderDTO` 对象,增强了类型安全性。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值