你好复杂的对象进行,所以我不得不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类型。我怎么能发送该列表作为控制器中的另一个参数或我应该怎么做?