问题
I'm try save a array of an Entity using POST method passing an array for rest resource, but I have an error:
org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Can not deserialize instance of br.com.servtech.almox.model.Item out of START_ARRAY token
at [Source: org.apache.catalina.connector.CoyoteInputStream@2af1e451; line: 1, column: 1]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of br.com.servtech.almox.model.Item out of START_ARRAY token
at [Source: org.apache.catalina.connector.CoyoteInputStream@2af1e451; line: 1, column: 1]
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:228) ~[spring-web-4.3.3.RELEASE.jar:4.3.3.RELEASE]
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readInternal(AbstractJackson2HttpMessageConverter.java:205) ~[spring-web-4.3.3.RELEASE.jar:4.3.3.RELEASE]
When's I send one object the data, the data is saved very well!
My Entity:
@Entity
public class Item implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Basic
private String name;
@Basic
private Integer quantity;
@Basic
private Double cash;
@ManyToOne
private Requirement requirement;
//getters and setters
}
My Repository:
@RepositoryRestResource
@CrossOrigin
public interface ItemDAO extends CrudRepository<Item, Long> {
}
The Data:
[{
"name": "A1",
"quantity": 3,
"cash": 5.80
}, {
"name": "B2",
"quantity": 3,
"cash": 5.80
}]
I've tried to using the Content-Type application/json and using with text/uri-list. What is wrong? I do some more setup?
回答1:
What is wrong is that is trying to read your request body as an Item, when it is in fact multiple Items.
I believe you have two choices here. What I would normally do in this situation would be to create another resource, such as ItemCollection, to wrap multiple Items. Then you could have standard REST functionality to take in an ItemCollection, which would essentially handle multiple Items.
Your second option would be to manually override a method to handle multiple itmes: http://docs.spring.io/spring-data/rest/docs/current/reference/html/#customizing-sdr.overriding-sdr-response-handlers
来源:https://stackoverflow.com/questions/40362789/how-to-save-many-objects-in-the-same-request-using-spring-boot-data-rest