2017-03-04 55 views
0

在Ajax請求中,當我嘗試將Spring JVM映射到Java對象時,我得到了400錯誤的請求。我檢查了大部分的主題中的相關問題,但仍然不能使它工作400使用Jackson的@RequestBody在ajax帖子上發出錯誤請求

Ajax調用和JSON:

$.ajax({ 
    type: "POST", 
    url: "vocabulary/createVocabulary", 
    contentType : 'application/json; charset=utf-8', 
    data: {"vocabularyName" : "a", 
    "vocabularyDescription" : "b"}, 

我的控制器:

@Service 
@Controller 
@RequestMapping(path="vocabulary") 
public class VocabularyController { 

@RequestMapping (path = "createVocabulary", method = RequestMethod.POST) 
@ResponseBody String createVocabulary(@RequestBody VocabularyDTO vocabularyDTO){ 
    return "Success"; 
    } 
} 

我的Java對象:

public class VocabularyDTO { 

private String vocabularyName; 
private String vocabularyDescription; 

public VocabularyDTO(){}; 

public String getVocabularyName() { 
    return vocabularyName; 
} 

public void setVocabularyName(String vocabularyName) { 
    this.vocabularyName = vocabularyName; 
} 

public String getVocabularyDescription() { 
    return vocabularyDescription; 
} 

public void setVocabularyDescription(String vocabularyDescription) { 
    this.vocabularyDescription = vocabularyDescription; 
} 
} 

我使用Spring 4.2.5和Jackson:

... 

def springVersion = "4.2.5.RELEASE" 

repositories { 
mavenCentral() 
jcenter() 
} 

dependencies { 

compile group: "org.springframework", name: "spring-core", version: "$springVersion" 
compile group: "org.springframework", name: "spring-beans", version: "$springVersion" 
compile group: "org.springframework", name: "spring-context", version: "$springVersion" 
compile group: "org.springframework", name: "spring-aop", version: "$springVersion" 
compile group: "org.springframework", name: "spring-web", version: "$springVersion" 
compile group: "org.springframework", name: "spring-webmvc", version: "$springVersion" 
compile group: "org.springframework.data", name: "spring-data-jpa", version: "1.9.4.RELEASE" 

compile group: "com.fasterxml.jackson.core", name: "jackson-databind", version: "2.6.5" 
compile group: "com.fasterxml.jackson.core", name: "jackson-core", version: "2.6.5" 
compile group: "com.fasterxml.jackson.core", name: "jackson-annotations", version: "2.6.5" 

... 
} 

我得到的錯誤:

HTTP錯誤400 問題訪問/ UX /詞彙/ createVocabulary。原因: BAD_REQUEST

此外,如果我從我的控制器中刪除「@ RequestBody'annotation我得到以下服務器響應:

無法實例[com.attila.vocabulary.ux.spring .vocabulary.DTO.VocabularyDTO]:找不到默認構造函數;嵌套的例外是java.lang.NoSuchMethodException:com.attila.vocabulary.ux.spring.vocabulary.DTO.VocabularyDTO()

沒有人有任何想法可能是錯誤的?謝謝!

UPDATE: 沒有「@RequestBody」註釋現在實際工作(這是我的一個愚蠢的錯誤,爲什麼之前沒有)選項 - 即不扔的錯誤,但是沒有被傳遞給對象的值。

我希望它能修復註釋,但我仍然得到這樣的400錯誤。

+0

有沒有其他的錯誤信息,以及400? – Jeremy

+0

不是我所知道的 - 這是我在瀏覽器中得到的所有答案。有什麼方法可以找到更多關於它的信息嗎? – ADR

回答

0

使用@RequestBody時,您的代碼不起作用,因爲您的ajax請求未發送json對象。您需要使用JSON.stringify()在發送JavaScript對象之前對其進行序列化。你爲什麼在你的控制器上使用@Service?嘗試與:

$.ajax({ 
    type: "POST", 
    url: "vocabulary/createVocabulary", 
    contentType : 'application/json; charset=utf-8', 
    data: JSON.stringify({"vocabularyName" : "a", 
    "vocabularyDescription" : "b"}), 


@Controller 
@RequestMapping(path="vocabulary") 
public class VocabularyController { 

@RequestMapping (path = "createVocabulary", method = RequestMethod.POST, consumes=MediaType.APPLICATION_JSON_VALUE} 
@ResponseBody String createVocabulary(@RequestBody VocabularyDTO vocabularyDTO){ 
    return "Success"; 
    } 
} 
+0

謝謝!序列化幫助。它現在工作正常。 – ADR