我剛剛開始使用Spring Boot CrudRepository,現在我的Enitity有一個唯一字段(不是P.K)FeedID和自動生成的值。 當我手動創建一個新對象而沒有設置FeedID值時,它工作正常,FeedID自動生成。 但是,當我使用JackSon對象映射器直接將請求參數Json轉換爲pojo對象時,它顯示FeedID字段爲空/重複異常。Hibernate AutoGenerated值不適用於Jackson mapper
控制器
@RequestMapping(method=RequestMethod.POST,value="/feed/addNewFeed")
public Feed addNewFeed(@RequestParam("Feed") String jsonFeed) throws JsonParseException, JsonMappingException, IOException {
Feed feed = new ObjectMapper().readValue(jsonFeed, Feed.class);
return feedRepoImplementation.addNewFeedImpl(feed);
}
ENTITY
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(nullable = false, unique = true)
private int FEED_ID;
@Id
@Column(length=100)
private String URL_LINK;//Primary Key
private String HEADLINE;
@Column(length=1500,nullable=false)
private String CONTENT;
@Column(length=500,nullable=false)
private String HEADLINE_IMAGE;
private FeedCatagory CATAGORY;
private String AUTHOUR_NAME;
private String PUBLISHING_DATE;
private String PUBLISHED;
private int VIEWS;
private int SHARED;
ERROR
com.microsoft.sqlserver.jdbc.SQLServerException: Violation of UNIQUE KEY constraint 'UK_6hu52poark0i0f4us9cfql8au'. Cannot insert duplicate key in object 'dbo.feed'.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216) ~[sqljdbc4.jar:na]
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1515) ~[sqljdbc4.jar:na]
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:404) ~[sqljdbc4.jar:na]
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:350) ~[sqljdbc4.jar:na]
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696) ~[sqljdbc4.jar:na]
但是代替使用ObjectMap的每如果我不碰FeedID場手動創建POJO它工作正常
Feed feed = new Feed();
feed.setAUTHOUR_NAME("AUTHOUR");
feed.setCATAGORY(UtilityHelper.FeedCatagory.SPORTS);
feed.setPUBLISHING_DATE("12/10/16");
feed.setCONTENT("CONTENT");
feed.setURL_LINK("URL-LINK");
feed.setHEADLINE("HEADLINE");
feed.setPUBLISHED("TRUE");
feed.setSHARED(0);
feed.setVIEWS(0);
feedRepository.save(feed);
我猜是客戶端JSON裏面我沒有不包括自動生成的場「FeedID」,所以obectMapper自動分配0〜該字段,但作爲0已經存在,所以重複約束顯示。請幫助
如果我傳遞「feedID」:nul在json裏面,它顯示空指針, – Chanky
你的代碼也會將ID保留爲默認值:0。你爲什麼不用你的調試器來查看你的JSON包含哪個值,以及哪個你的ID包含什麼值?另外,爲什麼不尊重Java命名約定,以及爲什麼將JSON作爲請求參數發送,而不是直接將它作爲請求主體發送? –
@Chanky。您是否嘗試了feedID與空格:'feedID:「'' –