jOOQ Spring Boot компиляция запроса, но не вставка в db - PullRequest
1 голос
/ 18 июня 2020

В настоящее время я пытаюсь использовать jOOQ в моем проекте springboot для вставки определенных данных, предоставленных пользователем из формы html, в MySQL db. Это мой MainController, отвечающий за получение данных из формы и выполнение запроса через VisitorRepository: я использую методы add и insertVisitor, но ни один из них не работает.

@Controller
public class MainController {

    private final VisitorRepository visitorRepository;

    @Autowired
    public MainController (VisitorRepository visitorRepository) {
        this.visitorRepository = visitorRepository;
    }

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String main() {
        return "main";
    }

    @ResponseBody
    @PostMapping("/")
    public Phonenum firstSubmit(Phonenum phonenum){
        System.out.println(phonenum.getPhonenumber());
        visitorRepository.insertVisitor(phonenum.getPhonenumber(),"now", phonenum.getName());
        return visitorRepository.add(phonenum);
    }
}

Интерфейс VisitorRepository:

    public interface VisitorRepository {

    public Phonenum add(Phonenum visitor);

    public List<Phonenum> findAll();

    public void  insertVisitor(String phoneNumber, String submitTime, String name);
    }

И реализация репозитория:

@Repository
@Transactional
public class VisitorRepo implements VisitorRepository{


private final DSLContext dslContext;


public VisitorRepo(DSLContext dslContext){
    this.dslContext = dslContext;
}


public void insertVisitor(String phoneNumber, String submitTime, String name){
    this.dslContext
            .insertInto(Phonenum.PHONENUM)
            .columns(Phonenum.PHONENUM.PHONENUMBER, Phonenum.PHONENUM.SUBMITTIME, Phonenum.PHONENUM.NAME)
            .values(phoneNumber, submitTime, name);

}


public com.demo.visitorlog.model.Phonenum add(com.demo.visitorlog.model.Phonenum visitor) {
    this.dslContext
            .insertInto(Phonenum.PHONENUM)
            .columns(Phonenum.PHONENUM.PHONENUMBER, Phonenum.PHONENUM.SUBMITTIME, Phonenum.PHONENUM.NAME)
            .values(visitor.getPhonenumber(), String.valueOf("submit time"), visitor.getName());
    System.out.println("ran");
    return visitor;
}

Я не совсем уверен, как настроить класс конфигурации, но вот что у меня есть:

@Configuration
public class mainConfig{

    @Autowired
    private DataSource dataSource;

    @Bean
    public DataSourceConnectionProvider connectionProvider() {
        return new DataSourceConnectionProvider
                (new TransactionAwareDataSourceProxy(dataSource));
    }

    @Bean
    public DefaultDSLContext dsl() {
        return new DefaultDSLContext(configuration());
    }

    public DefaultConfiguration configuration() {
        DefaultConfiguration jooqConfiguration = new DefaultConfiguration();
        jooqConfiguration.set(connectionProvider());
        return jooqConfiguration;
    }

Итак, я получить System.out.println() после почтового запроса, но когда я смотрю в свою базу данных, ничего не вставлено. Я что-то упускаю? Любая помощь будет принята с благодарностью :)

Ответы [ 2 ]

2 голосов
/ 18 июня 2020

Для выполнения запроса необходимо позвонить .execute()

this.dslContext
            .insertInto(Phonenum.PHONENUM)
            .columns(Phonenum.PHONENUM.PHONENUMBER, Phonenum.PHONENUM.SUBMITTIME, Phonenum.PHONENUM.NAME)
            .values(visitor.getPhonenumber(), String.valueOf("submit time"), visitor.getName())
            .execute();
0 голосов
/ 19 июня 2020

Проблема заключалась в том, что Spring Security автоматически включал защиту csrf, которую мне пришлось вручную отключить в классе Security Config, используя:

@Override
    protected void configure(HttpSecurity http) throws Exception{
        http.cors().and().csrf().disable();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...