欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring Boot与Kotlin处理Web表单提交的方法

程序员文章站 2023-12-02 19:45:04
我们在做web开发的时候,肯定逃不过表单提交,这篇文章通过spring boot使用kotlin 语言 创建和提交一个表单。 下面我们在之前《spring boot 与...

我们在做web开发的时候,肯定逃不过表单提交,这篇文章通过spring boot使用kotlin 语言 创建和提交一个表单。

下面我们在之前《spring boot 与 kotlin使用freemarker模板引擎渲染web视图》项目的基础上,增加处理表单提交。

build.gradle 文件没有变化,这里贴一下完整的build.gradle

group 'name.quanke.kotlin'
version '1.0-snapshot'

buildscript {
  ext.kotlin_version = '1.2.10'
  ext.spring_boot_version = '1.5.4.release'
  repositories {
    mavencentral()
  }
  dependencies {
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    classpath("org.springframework.boot:spring-boot-gradle-plugin:$spring_boot_version")

//    kotlin整合springboot的默认无参构造函数,默认把所有的类设置open类插件
    classpath("org.jetbrains.kotlin:kotlin-noarg:$kotlin_version")
    classpath("org.jetbrains.kotlin:kotlin-allopen:$kotlin_version")
  }
}

apply plugin: 'kotlin'
apply plugin: "kotlin-spring" // see https://kotlinlang.org/docs/reference/compiler-plugins.html#kotlin-spring-compiler-plugin
apply plugin: 'org.springframework.boot'

jar {
  basename = 'chapter11-5-4-service'
  version = '0.1.0'
}
repositories {
  mavencentral()
}

dependencies {
  compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
  compile "org.springframework.boot:spring-boot-starter-web:$spring_boot_version"
  compile "org.springframework.boot:spring-boot-starter-thymeleaf:$spring_boot_version"
//  compile "com.fasterxml.jackson.module:jackson-module-kotlin:$kotlin_version"
  testcompile "org.springframework.boot:spring-boot-starter-test:$spring_boot_version"
  testcompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"

}

compilekotlin {
  kotlinoptions.jvmtarget = "1.8"
}
compiletestkotlin {
  kotlinoptions.jvmtarget = "1.8"
}

创建实体类hello

/**
 * created by http://quanke.name on 2018/1/12.
 */
data class hello(var id: long? = 0, var content: string? = "")

创建controller

import name.quanke.kotlin.chaper11_5_4.entity.hello
import org.springframework.stereotype.controller
import org.springframework.ui.modelmap
import org.springframework.web.bind.annotation.modelattribute
import org.springframework.web.bind.annotation.postmapping
import org.springframework.web.bind.annotation.requestmapping
/**
 * created by http://quanke.name on 2018/1/10.
 */
@controller
class hellocontroller {

  @requestmapping("/")
  fun index(map: modelmap): string {
//    / 加入一个属性,用来在模板中读取
    map.addattribute("host", "http://quanke.name")
    map.addattribute("hello",hello())
    // return模板文件的名称,对应src/main/resources/templates/index.html
    return "index"
  }

  @postmapping("/hello")
  fun hellopostsubmit(@modelattribute hello: hello): string {
    return "result"
  }
}

页面展示层

src/main/resources/templates/index.html

<!doctype html>
<html xmlns:th="http://www.w3.org/1999/xhtml">
<head lang="en">
  <title>quanke.name</title>
  <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
</head>
<body>
<h1 th:text="${host}">hello world</h1>
<h1>form</h1>
<form action="#" th:action="@{/hello}" th:object="${hello}" method="post">
  <p>id: <input type="text" th:field="*{id}"/></p>
  <p>message: <input type="text" th:field="*{content}"/></p>
  <p><input type="submit" value="submit"/> <input type="reset" value="reset"/></p>
</form>
</body>
</html>

src/main/resources/templates/result.html

<!doctype html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
  <title>title</title>
</head>
<body>
<h1>result</h1>
<p th:text="'id: ' + ${hello.id}"/>
<p th:text="'content: ' + ${hello.content}"/>
<a href="/" rel="external nofollow" >submit another message</a>
</body>
</html>

spring boot 启动

import org.springframework.boot.springapplication
import org.springframework.boot.autoconfigure.springbootapplication
/**
 * created by http://quanke.name on 2018/1/9.
 */

@springbootapplication
class application

fun main(args: array<string>) {
  springapplication.run(application::class.java, *args)
}

启动工程,访问ttp://localhost:8080/:

参考:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。