作为我的要求的一部分,我公开了一个Web服务,它将Employee类作为JSON格式的输入.员工类如下.如果您看到类中有3个属性,如status,password,creationTime.现在我试图阻止用户提供status和creationTime等属性.我的意思是说我不想让用户输入JSON: -
{
"emp_id": "xyz@gmail.com",
"credentials" : {"password": "xxxxx"},
"status": "ACTIVE",
"creationTime": "<UTC time>"
}
Run Code Online (Sandbox Code Playgroud)
输入status和creationTime时,应该会产生400错误消息.同样,当我向用户显示结果时,return Response.status(Status.ACCEPTED).entity(employee).build();它不应显示creationTime或凭据.它应该看起来像: -
{
"emp_id": "xyz@gmail.com",
"status": "ACTIVE",
}
Run Code Online (Sandbox Code Playgroud)
我可以看到有一个@JsonIgnore属性在我的情况下不适用于状态.我试过杰克逊.
我的员工类如下:
import java.util.Date;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonProperty;
@XmlRootElement
public class Employee {
@XmlElement(name = "emp_id", required = true)
@JsonProperty("emp_id")
private String empId;
private Credentials credentials;
private String status;
private Date creationTime;
public String getEmpId() {
return empId;
}
public void setEmpId(String empId) {
this.empId = empId;
}
public Credentials getCredentials() {
return credentials;
}
public void setCredentials(Credentials credentials) {
this.credentials = credentials;
}
@JsonIgnore
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Date getCreationTime() {
return creationTime;
}
public void setCreationTime(Date creationTime) {
this.creationTime = creationTime;
}
}
Run Code Online (Sandbox Code Playgroud)
来自泽西岛文档:
自 Jersey 2.0 以来,通过 MOXy 提供的 JSON 绑定支持是 Jersey 应用程序中支持 JSON 绑定的默认且首选方式。当 JSON MOXy 模块位于类路径上时,Jersey 将自动发现该模块并通过应用程序中的 MOXy 无缝启用 JSON 绑定支持。
由于MOXy支持JAXB 注释,因此请尝试使用@XmlTransient. 它应该可以解决问题。
要使用 Jackson 2.x 作为 JSON 提供程序,您需要将jersey-media-json-jackson模块添加到您的pom.xml文件中:
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.22.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
要使用 Jackson 1.x,您需要以下jersey-media-json-jackson1模块:
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson1</artifactId>
<version>2.22.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
有关依赖项的更多信息,请查看Jersey 文档。
如果可以,请选择 Jackson 2.x 而不是 Jackson 1.x。
为了使用 Jackson 作为 JSON 提供程序,您需要在您的类(Jersey 自己的类实现)中注册JacksonFeatureJackson 2.x(或Jackson1FeatureJackson 1.x):ResourceConfigApplication
public class MyApplication extends ResourceConfig {
public MyApplication() {
register(JacksonFeature.class);
}
}
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请查看文档。
JsonProperty注释JsonProperty确保您根据 Jackson 版本使用正确的注释:
org.codehaus.jackson.annotate.JsonPropertycom.fasterxml.jackson.annotation.JsonProperty有关注释的更多详细信息,请查看文档:
此外,不要对getStatus()方法进行注释,而是尝试status使用正确的@JsonProperty注释对字段进行注释。
| 归档时间: |
|
| 查看次数: |
3191 次 |
| 最近记录: |