Я настроил тестовый веб-сервис Spring, используя одну сущность для моего объекта XML un / marshalling и domain.
Я использую maven со встроенной Jetty и встроенной базой данных H2 только для тестирования службы.
Когда я запускаю POST для создания «Регистрации», я вижу следующую информацию в своей веб-консоли:
Hibernate: вставьте в значения регистрации (id, email, firstName, language, lastName) (null,?,?,?,?)
Как вы можете видеть, поля в объекте являются нулевыми, и поэтому вставка завершается неудачно.
Извините за подробности, но если кто-нибудь сможет ответить на этот вопрос, я думаю, вам нужна вся следующая информация:
весна-context.xml
<bean="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="marshallingHttpMessageConverter"/>
</list>
</property>
</bean>
<bean id="marshallingHttpMessageConverter"
class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter"
p:marshaller-ref="jaxb" p:unmarshaller-ref="jaxb" />
<oxm:jaxb2-marshaller id="jaxb">
<oxm:class-to-be-bound name="com.nosh.project.bean.Registration" />
</oxm:jaxb2-marshaller>
<context:component-scan base-package="com.nosh.project.controller" />
<context:component-scan base-package="com.nosh.project" />
<jdbc:embedded-database id="dataSource" type="H2" />
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
p:dataSource-ref="dataSource" p:lobHandler-ref="defaultLobHandler"
p:packagesToScan="com.nosh.project.bean">
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.H2Dialect
hibernate.show_sql=true
hibernate.hbm2ddl.auto=create
</value>
</property>
</bean>
<bean id="defaultLobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" />
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager"
p:sessionFactory-ref="sessionFactory" />
<tx:annotation-driven proxy-target-class="true"/>
Registration.java (объект и объект XML)
@XmlRootElement(name="registration")
@Entity
public class Registration implements Serializable{
private static final long serialVersionUID = 1L;
private Long id;
private String firstName;
private String lastName;
private String email;
private String language;
public Registration() {
}
@Id
@GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@XmlElement(name = "firstName", required = true)
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@XmlElement(name = "lastName", required = true)
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@XmlElement(name = "email", required = true)
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@XmlElement(name = "language", required = true)
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
}
Контроллер
@Controller
@RequestMapping("/registration")
@Transactional()
public class RegistrationController {
private RegistrationDao registrationDao;
@Autowired
public void setRegistrationDao(RegistrationDao registrationDao) {
this.registrationDao = registrationDao;
}
//TODO add inbound object validation to check all required fields are correct.
@RequestMapping(method = RequestMethod.POST)
@Transactional(readOnly = false)
@ResponseStatus(HttpStatus.CREATED)
public @ResponseBody
Registration saveRegistration(Registration registration,
BindingResult result, HttpServletResponse response) throws BindException {
if (result.hasErrors()){
throw new BindException(result);
}
registrationDao.saveRegistration(registration);
response.setHeader("Location", "/Registration/" + registration.getId());
return registration;
}
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
@ResponseBody
public Registration getRegistration(@PathVariable("id") Long registrationId) {
return registrationDao.getRegistration(registrationId);
}
}
Я посмотрел несколько примеров и не вижу, что мне здесь не хватает. Это как-то связано с тем фактом, что я использую один объект для своей сущности данных и XML unmarshalling?
Большое спасибо