发布数据时,Spring MVC Java 415不支持的媒体类型和路径问题

时间:2014-11-24 13:01:04

标签: java json spring spring-mvc

我正在编写一个使用JSON Web服务的Spring MVC应用程序。应用程序可以使用表单保存和检索数据(这是有效的,并且不使用Web服务)但我也尝试通过使用Web服务来执行此功能。我在Firefox中使用RESTClient插件来使用我的URI发送和接收数据。

以下是相关代码:

GeneralIncidentWebServiceImpl.java:

//Omitted setter for generalIncidentService.


@Override
@POST
@Path("/addgeneralincident")
@Consumes(MediaType.APPLICATION_JSON)
public void addGeneralIncident(GeneralIncident newGeneralIncident) {
   generalIncidentService.addGeneralIncident(newGeneralIncident); //This is not being hit when I try to add a new general incident

}

//This works in RESTClient
@Override
@GET
@Path("/getgeneralincident")
@Produces(MediaType.APPLICATION_JSON)
public List<GeneralIncident> getGeneralIncident() {
    return generalIncidentService.getGeneralIncident();
}

我试图传递的数据如下:

   [
       {
           "lifeCycleStage": "NEW",
           "sourceType": "MYSOURCE",
           "createdTime": 1390522260000,
           "expiryTime": 1391040660000,
           "messageTitle": "test",
           "messageBody": "test",
           "furtherInformation": "test",
           "internalInformation": "test",
           "marketingInformation": "test",
           "className": "com.x.itds.domain.GeneralIncident",
           "incidentDetail": "GeneralIncident (incidentNumber:NO VALUE, tocCode: NO VALUE, version: 1)",
           "incidentClassName": "GeneralIncident"
       }
    ]

我看到两个不同的问题:

在控制台中:

WARNING: No operation matching request path "/cxf/action/addgeneralincident" is found, Relative Path: /addgeneralincident, HTTP Method: POST, ContentType: text/plain;charset=UTF-8, Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,.

在RESTClient Firefox插件中

Status Code: 415 Unsupported Media Type
Content-Length: 0
Date: Mon, 24 Nov 2014 12:29:18 GMT
Server: Apache-Coyote/1.1

我从控制台消息(其中说:Accept: text/html,application/xhtml+xml,application/xml;)知道我需要修改请求应该认为可接受的内容。我见过使用@RequestMapping注释并将headers属性设置为所需内容类型的示例,但这些示例似乎是针对控制器的,而我提供的上述类不是控制器类。无论如何我试过这个看它是否会起作用但是没有。另外需要注意的是,当我运行我的URI来添加数据时,相关的方法没有被击中。我在方法中的单个语句上放置了一个断点,以观察发生了什么,但是没有达到。

1 个答案:

答案 0 :(得分:0)

您需要确保传输正确的HTTP标头。在你的情况下应该是:

Content-type:application/json

因为您定义了控制器接受的内容。你还提到你不能用断点捕获任何东西,这是因为在你的代码到达之前,异常会在spring内部类中被抛出。

另外,如果您不想遵循严格的HTTP标准,请不要定义Consumes注释,这样可以解决您的问题。