我目前正在工作的要求之一,我想在我的数据库中发布一些数据。
在我名为template_data的数据库中,我有三个列,名为id,json_data和timestamp。json_data列将保存json,其中json值将来自用户,例如:
"suggestions": [
{
"reply": {
"text": "**Tobe given by user**",
"postbackData": "**Tobe given by user**"
}
}
我必须通过我的代码来构造这个JSON,我在下面的代码中所做的就是这样。
package com.airkommtemplate.springboot.RCMTemplate.controller;
import com.airkommtemplate.springboot.RCMTemplate.entity.TemplateData;
import com.airkommtemplate.springboot.RCMTemplate.service.TemplateServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import java.time.LocalDateTime;
import java.util.List;
@Controller
@RequestMapping("/templates")
public class TemplateController {
private TemplateServiceImpl templateService;
@Autowired
public TemplateController(TemplateServiceImpl theTemplateService){
templateService = theTemplateService;
}
@GetMapping("/form")
public String showForm(Model model) {
model.addAttribute("template", new TemplateData());
return "templates/template-form"; // Thymeleaf template file name (e.g., template-form.html)
}
@GetMapping("/list")
public String listTemplateData(Model theModel) {
List<TemplateData> theTemplateList =templateService.findAll();
// add to the spring model
theModel.addAttribute("templates", theTemplateList);
return "templates/list-templates";
}
@PostMapping("/save")
public String saveData(@ModelAttribute("template") TemplateData template) {
// Construct the complete JSON structure using user input
String jsonData = "{\"suggestions\": [{" +
"\"reply\": {" +
"\"text\": \"" + template.getText() + "\"," +
"\"postbackData\": \"" + template.getPostbackData() + "\"" +
"}}]}";
// Set timestamp
template.setTimestamp(LocalDateTime.now());
// Save the complete JSON data to the database
template.setJsonData(jsonData);
templateService.saveData(template);
return "redirect:/templates/list";
//return "redirect:/success"; // Redirect to a success page
}
}
- 服务 *
package com.airkommtemplate.springboot.RCMTemplate.service;
import com.airkommtemplate.springboot.RCMTemplate.dao.TemplateDataRepository;
import com.airkommtemplate.springboot.RCMTemplate.entity.TemplateData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
@Service
public class TemplateServiceImpl implements TemplateService{
private final TemplateDataRepository templateDataRepository;
@Autowired
public TemplateServiceImpl(TemplateDataRepository templateDataRepository) {
this.templateDataRepository = templateDataRepository;
}
@Override
public List<TemplateData> findAll() {
return templateDataRepository.findAll();
}
@Override
public void saveData(TemplateData templateData) {
//TemplateData templateData = new TemplateData();
templateData.setTimestamp(LocalDateTime.now());
templateDataRepository.save(templateData);
}
}
存储库(DAO)
package com.airkommtemplate.springboot.RCMTemplate.dao;
import com.airkommtemplate.springboot.RCMTemplate.entity.TemplateData;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface TemplateDataRepository extends JpaRepository<TemplateData, Integer> {
}
我的实体类持有以下参数
@Entity
@Table(name="template_data")
public class TemplateData {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="json_data")
private String jsonData;
@Column(name="timestamp")
private LocalDateTime timestamp;
private String text;
private String postbackData;
当我尝试使用**/templates/保存**API保存此数据时,它会抛出以下错误:
There was an unexpected error (type=Internal Server Error, status=500).
could not execute statement; SQL [n/a]
org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute statement; SQL [n/a]
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:256)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:232)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:550)
at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61)
at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:243)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:152)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:164)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:244)
at jdk.proxy4/jdk.proxy4.$Proxy111.save(Unknown Source)
at com.airkommtemplate.springboot.RCMTemplate.service.TemplateServiceImpl.saveData(TemplateServiceImpl.java:29)
at com.airkommtemplate.springboot.RCMTemplate.controller.TemplateController.saveData(TemplateController.java:59).......
Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'postback_data' in 'field list'
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:121)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122......
我已经尝试改变参数的模板类型,我在我的控制器传递到服务调用,但没有工作了。没有工作在这里,帮助将不胜感激。
谢谢.
1条答案
按热度按时间pcrecxhr1#
请记住
Java的transient关键字用于表示字段不被序列化,而JPA的@Transient注解用于表示字段不被持久化在数据库中,即它们的语义不同。
因此,请进行以下更改
如果答案有效,请接受,谢谢!