[英]Unmarshall json @POST parameter
I have a class looking like this: 我有一堂课,看起来像这样:
public class Test {
@JsonProperty("name")
private String name;
public Test(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Also there is an endpoint class using javax.ws.rs: 还有一个使用javax.ws.rs的终结点类:
@Path("/Test")
public class Endpoint {
@POST
@Consumes("application/json")
@Produces("application/json")
@HeaderParam("Accept") @DefaultValue("application/json")
public Response createTest(String json) {
return Response.status(Response.Status.ACCEPTED).entity(json).build();
}
}
This works as expected. 这按预期工作。
Question: How can I make createTest() take the "Test" class as a parameter instead of "String"? 问题:如何使createTest()将“ Test”类作为参数而不是“ String”?
Trial: Sending the following gives "415 Unsupported Media Type" when using "Test" as a paramter to createTest(): 试用:当使用“测试”作为createTest()的参数时,发送以下内容会给出“ 415不支持的媒体类型”:
POST ../Endpoint/ HTTP/1.1
Host: localhost:8080
Accept: application/json
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: 56d06798-2b32-57fc-c22a-0240aceb8f98
{
"name": "Kalle"
}
I think you have to use Jersey 2.xx version. 我认为您必须使用Jersey 2.xx版本。
public class LoginRequest {
private String userName;
private String password;
public LoginRequest(){
super();
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Your Resource with a Bean (here goes your Bean Test) 使用Bean的资源(进行Bean测试的地方)
@POST
@Path("login")
@Consumes(MediaType.APPLICATION_JSON)
public Response login(LoginRequest request) {
....
}
and the dependecies: 和依赖:
<properties>
<jersey.version>2.22.1</jersey.version>
<jackson.version>2.6.1</jackson.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<version>1</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.glassfish.jersey</groupId>
<artifactId>jersey-bom</artifactId>
<version>${jersey.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-common</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
</dependencies>
The reason 415 Unsupported Media Type issue is because you don't have the correct dependecies. 415不支持的媒体类型问题的原因是因为您没有正确的依赖关系。
... have fun ... 玩得开心
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.