內涉及時間戳錯誤的請求我有一個Spring MVC 3控制器誰擁有的對象錯誤400:JSON對象
這個對象包含大量的屬性,大多是串/數字的@ModelAttribute參數。它有一個java.sql.Timestamp屬性。
我通過瀏覽器調用此方法,將屬性作爲單獨的查詢字符串鍵/值對傳遞。當我沒有通過一個鍵/值對的時間戳一切正常,它加載與我的所有屬性的對象。
但是,只要我嘗試爲Timestamp proeprty發送一個值,就會立即得到Error 400:Bad request。
我知道我必須以特定的格式發送數據字符串,但我只是使用JsonDeserializer,以便我可以使用我想要的格式解析字符串。但是當我在JsonDeserializer中設置一個斷點時,它永遠不會被擊中。春天似乎只是忽略它。我錯過了什麼?
一些代碼:
控制器:
@RequestMapping(headers = "Accept=application/json;charset=utf-8", value = "/doSomething", method = RequestMethod.GET)
@ResponseBody
public ReturnObject doSomething(@ModelAttribute MyObject obj, HttpServletRequest request) throws Exception {
//blah blah
}
爲MyObject:
public class MyObject {
private Integer someNumber;
private String someString;
@JsonDeserialize(using=ShortDateDeserializer.class)
private Timestamp someTimestamp;
// getter/setters like usual....
}
ShortDateDeserializer:
public class ShortDateDeserializer extends JsonDeserializer<Timestamp> {
Logger logger = Logger.getLogger(ShortDateDeserializer.class);
@Override
public Timestamp deserialize(JsonParser parser, DeserializationContext ctx) throws IOException, JsonProcessingException {
try {
String rawDate = parser.getText();
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
return new Timestamp(sdf.parse(rawDate).getTime());
} catch (Exception e) {
logger.error("Failed to parse date: "+parser.getText());
throw new IOException("Failed to parse date: "+parser.getText());
}
}
}
當我打電話給我的服務只設置numbe r /字符串如下:
localhost/doSomething?someNumber=1&someString=xyz
工作正常。
當我還試圖爲timstamp設定值:
localhost/doSomething?someNumber=1&someString=xyz&someTimestamp=09/15/2013
我立即得到一個錯誤400:錯誤的請求。
爲了讓Spring在填充MyObject時使用自定義時間戳解析代碼,我錯過了什麼?
在調試級別記錄您的請求並將其包含在您的問題中。日誌包'org.springframework.web' – Bart
嘗試把'@RequestBody'而不是'@ModelAttribute' – luizcarlosfx
@luizcarlosfx:是啊,實際上修復它!實際上,我甚至在這裏使用ModelAttribute是一個錯誤,我應該使用RequestBody,因爲它是一個包含大量數據的POST。感謝您的支持!雖然我仍然想知道爲什麼ModelAttribute無法使用Deserializer,因爲這仍然看起來像一些GET的不需要使用RequestBody的願望功能... – Trant