在我問我的問題之前,我不得不說我已經閱讀了20多個關於這個問題的問題和文章,他們都不能解決它。用java作爲服務器和jquery作爲客戶端的簡單的JSON POST
我的問題是我在Java這樣一個寧靜的服務器:
@RequestMapping (value = "/downloadByCode", method = RequestMethod.POST)
@ResponseBody
public void downloadByCode(@RequestBody final String stringRequest, final HttpServletResponse response)
{
try
{
final ObjectMapper objectMapper = new ObjectMapper();
final JsonNode jsonRequest = objectMapper.readValue(stringRequest, JsonNode.class);
// ...
// some processings here to create the result
// ....
final ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(result);
// Flush the result
outputStream.flush();
}
catch (final Exception exception)
{
LOG.debug("Exception Thrown [downloadByCode]", exception);
}
}
我嘗試了多種不同的方式爲JSON發送到該服務器使用jQuery(但他們都創造錯誤):
$.ajax({
url:"/downloadByCode",
type:"POST",
data: JSON.stringify({"name":"value"}) });
415 "errors message" : "Content type 'application/x-www-form urlencoded;charset=UTF-8' not supported", "type" : "HttpMediaTypeNotSupportedError"
所以,我想加入的contentType來解決它:
$.ajax({
url:"/downloadByCode",
contentType:"application/json",
type:"POST",
data: JSON.stringify({"name":"value"}) });
400 "errors message" : "Could not instantiate JAXBContext for class [class java.lang.String]: null; nested exception is javax.xml.bind.JAXBException\n - with linked exception:\n[java.lang.NullPointerException", "type" :"HttpMessageConversionError"
我試着直接發送json對象而不是JSON.stringify,它給出了相同的400錯誤。
我試圖給@requestMapping添加不同的消耗,但仍然沒有運氣。
我試圖定義我自己的類而不是JsonNode,但它不會改變任何東西。
任何想法?
您是否嘗試將您的@RequestBody參數類型更改爲Map或使用單個「name」屬性創建一個類並將其用作類型(由Vinh Vo建議)? –
NTyler
@NTyler,我從來沒有嘗試過Map,我現在就試試它。感謝您的建議 –
Arashsoft
Vinh Vo方法創建以下錯誤:'無法爲類[$ InputData]實例化JAXBContext:\ r \ n異常說明:$ InputData需要一個零參數構造函數或指定的工廠方法。請注意,非靜態內部類不具有零參數構造函數,並且不受支持。' – Arashsoft