POST请求中有415个不支持的mediaType

时间:2016-10-18 19:44:27

标签: java tomcat jackson

正在阅读并且其他人遇到的很多问题是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;
}
}

希望有经验的人可以找出问题所在。请保持与我的问题相关。

3 个答案:

答案 0 :(得分:1)

看来您的请求正文是有效的json字符串,只需验证您是否在邮递员应用中传递了正确的标题。标题看起来像是

Accept:application/json
Content-Type:application/json

enter image description here

答案 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将为您的请求完成工作!希望这有助于他人!