在JavaW/Spring中发送文本REST消息

在JavaW/Spring中发送文本REST消息,java,string,spring,rest,Java,String,Spring,Rest,我已经编写了一个REST请求映射程序: @RequestMapping(value = "/resttest", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.TEXT_PLAIN_VALUE) public ResponseEntity<String> receiveBody(@RequestBody String bodymsg,Http

我已经编写了一个REST请求映射程序:

@RequestMapping(value = "/resttest", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.TEXT_PLAIN_VALUE)
public ResponseEntity<String> receiveBody(@RequestBody String bodymsg,HttpServletRequest request)  {
    String header_value = request.getHeader("h_key");       
    return new ResponseEntity<String>(HttpStatus.OK);
}
@RequestMapping(value=“/restest”,method=RequestMethod.POST,products=MediaType.APPLICATION\u JSON\u value,consumes=MediaType.TEXT\u PLAIN\u value)
public ResponseEntity receiveBody(@RequestBody String bodymsg,HttpServletRequest){
String header_value=request.getHeader(“h_键”);
返回新的响应状态(HttpStatus.OK);
}
我想向此发送一个POST方法,如下所示:

public static void sendpost() {
    RestTemplate restTemplate = new RestTemplate();
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.set("h_key","this is the value you need");
    HttpEntity<String> entity = new HttpEntity<String>("text body", headers);
    ResponseEntity<JSONObject> response = restTemplate
            .exchange("http://localhost:9800/resttest", HttpMethod.POST, entity,JSONObject.class);
}
publicstaticvoidsendpost(){
RestTemplate RestTemplate=新RestTemplate();
HttpHeaders=新的HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
设置(“h_键”,“这是您需要的值”);
HttpEntity=新的HttpEntity(“文本体”,标题);
ResponseEntity响应=restTemplate
.交换(”http://localhost:9800/resttest,HttpMethod.POST,entity,JSONObject.class);
}
但我得到了这个错误:

不支持的媒体类型


我的发送方法有什么问题?

您将服务器端设置为仅接受计划文本,但您的请求将内容类型设置为“application/json”。。。表示您正在告诉服务器端您正在发送JSON格式,因此服务器端会说“我不支持这种媒体类型”(http错误代码415)

谢谢你说的话

我尝试使用RESTGUI客户端向控制器发送数据,效果很好

如果在RESTGUI中将“内容类型”指定为“文本/普通”,可能会得到相同的错误代码

为了

如果我将控制器消耗部分更改为:ALL_值,它工作正常


,这是因为现在您告诉服务器端代码接受所有媒体类型(内容类型),所以无论您在客户端请求中设置了什么值,这都不再重要。

您将服务器端设置为仅接受计划文本,但您的请求将内容类型设置为“application/json”。。。表示您正在告诉服务器端您正在发送JSON格式,因此服务器端会说“我不支持这种媒体类型”(http错误代码415)

谢谢你说的话

我尝试使用RESTGUI客户端向控制器发送数据,效果很好

如果在RESTGUI中将“内容类型”指定为“文本/普通”,可能会得到相同的错误代码

为了

如果我将控制器消耗部分更改为:ALL_值,它工作正常


,这是因为现在您告诉服务器端代码采用所有媒体类型(内容类型),所以无论您在客户端请求中设置了什么值,都不再重要。

您的控制器不应该使用JSON吗?我发现打开Spring的跟踪日志很有帮助,当我看到这样的错误时,它会告诉你更多。我发送的主体是一个字符串,头是JSON。我该怎么办?我尝试使用RESTGUI客户端向控制器发送数据,效果很好。问题在于sendpost()方法:(您的代码显示您正在标题中设置“h_key”。HttpEntity应该封装JSON,标题应该只提供类型。@您能更具体一点吗?“header应该只提供类型”是什么意思顺便说一句,我有一个解决办法:如果我将控制器consumes part更改为:ALL_VALUE,它就可以正常工作。将
consumes=MediaType.TEXT_PLAIN_VALUE
更改为
MediaType.APPLICATION_JSON
您的控制器不应该使用JSON吗?我发现,当我看到这样的错误时,打开Spring的跟踪日志记录很有帮助,它会告诉您很多信息关于。我发送的主体是一个字符串,标题是JSON。我应该怎么做?我尝试使用REST GUI客户端将数据发送到控制器,效果很好。问题在于sendpost()方法。:(您的代码显示您正在设置“h_key”在标题中。HttpEntity应该封装JSON,标题应该只提供类型。@你能更具体一点吗?你说“header应该只提供类型”是什么意思顺便说一句,我有一个解决办法:如果我将控制器的consumes part更改为:ALL\u VALUE,它工作正常。将
consumes=MediaType.TEXT\u PLAIN\u VALUE更改为
MediaType.APPLICATION\u JSON