你好複雜的對象進行,所以我不得不2個實體如何與POST請求
主要實體
@Entity
@Table(name = "Events")
public class Event {
//Some fields ...
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "event_eventtypes" ,
joinColumns = @JoinColumn(name = "event_id"),
inverseJoinColumns = @JoinColumn(name = "event_type_id"))
private Set<EventType> eventTypes;
//Getters and setters...
現在我有一個使用彈簧表單標籤庫
創建的窗體<form:form modelAttribute="event" method="post" action="/event/registerEvent" commandName="event">
<form:label path="name">Event display name</form:label>
<form:input path="name" type="text" cssClass="form-control" placeholder="Display name"/>
<form:label path="description" >Description</form:label>
<form:textarea path="description" cssClass="form-control"/>
<form:label path="priv" cssClass="">Make private? <span style="font-family:'Open Sans', sans-serif; font-size:11px; color: dodgerblue;">(It will be seen by your friends and people who you send invitation.)</span></form:label>
<form:checkbox path="priv" cssClass="form-check-input"/>
<form:label path="age">Age limit</form:label>
<form:select path="age">
<form:options items="${age}"/>
</form:select>
<form:hidden path="lng" id="formLang" />
<form:hidden path="lat" id="formLat"/>
<%--Question appear here--%>
<form:select path="eventTypes" items="${eventTypes}" multiple="true"/>
<input type="submit" value="Submit">
控制器
@Controller
public class EventController {
private static final Logger logger = LoggerFactory.getLogger(EventController.class);
@Autowired
private EventService eventService;
@Autowired
private UserService userService;
@Autowired
private EventTypeService eventTypeService;
@RequestMapping(path = "/event/create", method = RequestMethod.GET)
public String init(ModelMap modelMap) {
List<String> tags = eventTypeService.listEventTypes().stream().map(EventType::getName).collect(Collectors.toList());
ArrayList<Integer> ageArr = new ArrayList();
ageArr.add(0);
ageArr.add(6);
ageArr.add(12);
ageArr.add(16);
ageArr.add(18);
modelMap.addAttribute("event", new Event());
modelMap.addAttribute("age", ageArr);
modelMap.addAttribute("eventTypes", tags);
return "/event/create";
}
@RequestMapping(path = "/event/registerEvent", method = RequestMethod.POST)
public String createEvent(@ModelAttribute("event") Event event, @ModelAttribute("eventTypes1") List<String> eventTypes){
event.setDate(new Date());
event.setUser(userService.getUserByUsername(
AuthenticationService.getLoggedInUser())
);
eventService.addEvent(event);
return "redirect:/";
}
當值的完整形式,點擊提交,得到錯誤
400通過客戶端發送的請求是語法不正確。
這是因爲eventTypes屬性是String類型。我怎麼能發送該列表作爲控制器中的另一個參數或我應該怎麼做?