Spring Boot 2.7.8
我有一个简单的POJO称为参与者。前端发送一个API请求,其中包含我希望存储在DB中的字段IP。然而,在后端,我将此字段作为null。我将此字段标记为jsonIgnore的原因是因为我不希望此字段包含在有效的get API响应中。我在响应中看不到此字段,但在初始API中,该字段被Map为null,因此我无法存储它。
import com.fasterxml.jackson.annotation.JsonIgnore;
@Entity
@Table(name="participant")
public class Participant {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long participantId;
private String ip;
public void setIp(String ip) {
this.ip = ip;
}
@JsonIgnore
public String getIp(){return this.ip;}
}
字符串
REST控制器
@RequestMapping(value = "api/test", method = RequestMethod.POST)
public ResponseEntity<?> addParticipant(@RequestBody Participant p) {
.....
}
型
Pom.xml
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>master</groupId>
<artifactId>hype</artifactId>
<version>0.1</version>
<packaging>war</packaging>
<name>hype</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>20</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</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-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.7.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
</dependencies>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.8</version>
<relativePath />
</parent>
</project>
型
前端API负载包含字段值
{
ip : "172.1.1.1"
}
型
但在后端,它的null
{
ip: null
}
型
1条答案
按热度按时间dy1byipe1#
@JsonIgnore在字段级别用于标记要忽略的属性或属性列表。:)
在系统设计中,你不应该使用实体作为请求/响应数据对象。为了系统安全,你应该提供一个请求/响应数据对象,然后将数据对象Map(在业务逻辑之后)到实体,然后将数据保存到数据库中。(适配器设计模式)
这种方式的优点: