正在阅读并且其他人遇到的很多问题是Spring,Gradle或其他。似乎Postman不喜欢我的请求,即我正在使用POST
方法。
错误:
b>description</b>
<u>The server refused this request because the request entity is in a format not supported by the requested resource for the requested method (Unsupported Media Type).</u>
来自邮递员的身体:
{
"firstName": "firstName",
"lastName": "lastName",
"dob": "12/12/2012",
"address": "123 main st."
}
有问题的帖子:
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Path("/createQuery")
public Response createQuery(ApplicationInfo info) throws IOException {
String queryString =createStringFromJSON(info,true);
queryMap.put(""+countId,queryString);
countId++;
ObjectMapper objectMapper = new ObjectMapper();
String json = "";
try {
json = objectMapper.writeValueAsString(queryMap);
} catch (JsonProcessingException e) {
e.printStackTrace();
} return Response.ok(json,MediaType.APPLICATION_JSON_TYPE).entity(json).build();
}
难以置信的复杂ApplicationInfo对象:
public class ApplicationInfo
{
String firstName;
String lastName;
String dob;
String address;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getDob() {
return dob;
}
public void setDob(String dob) {
this.dob = dob;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
希望有经验的人可以找出问题所在。请保持与我的问题相关。
答案 0 :(得分:1)
看来您的请求正文是有效的json字符串,只需验证您是否在邮递员应用中传递了正确的标题。标题看起来像是
Accept:application/json
Content-Type:application/json
答案 1 :(得分:0)
在黑暗中这是一个镜头,但是你将一个字符串发布到一个带有ApplicationInfo的方法,我不太确定JAX-RS会像春天一样对象进行对象映射可以用@RequestBody。
尝试将方法签名更改为public Response createQuery(String info) throws IOException
,因为您的方法只是尝试将ApplicationInfo转换为JSON。
答案 2 :(得分:0)
感谢@BenHarris指出我正确的方向。对于你所有未来的流浪者来说,这就是你所做的:
如果你在我的任务中,这就是你所做的:
将Jackson注释添加到您的pom.xml中:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>{$jackson.version}</version>
</dependency>
然后在web.xml
:
<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>
org.glassfish.jersey.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.your.project; com.fasterxml.jackson.jaxrs</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
因此,当您运行Tomcat时,您ObjectMapper
将为您的请求完成工作!希望这有助于他人!