我正在编写一个使用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来添加数据时,相关的方法没有被击中。我在方法中的单个语句上放置了一个断点,以观察发生了什么,但是没有达到。
答案 0 :(得分:0)
您需要确保传输正确的HTTP标头。在你的情况下应该是:
Content-type:application/json
因为您定义了控制器接受的内容。你还提到你不能用断点捕获任何东西,这是因为在你的代码到达之前,异常会在spring内部类中被抛出。
另外,如果您不想遵循严格的HTTP标准,请不要定义Consumes注释,这样可以解决您的问题。