问题
In Java Spring MVC project, I post an object to a @RestController and the object I post has an date property. If I remove this property, the post works successfully. But with the date property, it returns a 400 bad request. In the dto the Date is java.util.Date
Method in controller:
@RequestMapping(value = "/users/createPetition", method = RequestMethod.POST)
public @ResponseBody PetitionDTO addPetition(@RequestBody PetitionRequestDTO petitionDto, Model model) { ...
PetitionRequestDTO
public class PetitionRequestDTO {
private Long userId;
private Long categoryId;
private String title;
private String description;
private Date initialDate;
private String address; //getters setters
The angular js call
if ($scope.petitionForm.$valid) {
$http.post(getCompletePath("users/createPetition"), JSON.stringify($scope.newPetition))
.success(function (petition) {
}).error(function (data, status, headers, config) {
});
In the js the date has the next value: Thu Mar 19 2015 00:00:00 GMT-0300 (Argentina Standard Time)
The complete json is:
"{"selectedCategory":{"id":3,"name":"Plomero","description":"Plomeria"},"name":"aaa","title":"bbb","description":"ccc","initialDate":"2015-03-19T03:00:00.000Z","address":"asd","categoryId":3}"
回答1:
You need to ensure a better format in your JS code for the JSON Date. There is a discussion here that you should consider - The "right" JSON date format.
Once you have this in order you need a corresponding Date Time Formatter in Spring MVC to be able to convert the JSON Date String into Date Object - spring mvc date format with form:input; and here's another example.
回答2:
In your log4j properties, activate spring debug logs so that you will be able to see what is wrong with your object sent in request. Add the following line to your log4j properties:
log4j.logger.org.springframework.web=debug
For example, my error text:
org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Unrecognized field "date" (class org.joda.time.DateTime), not marked as ignorable
Here, I can see that my "date" field is causing a problem and I will fix it by investigating around it.
来源:https://stackoverflow.com/questions/29379947/angular-js-post-date-bad-request-in-java-spring-mvc