Investigación de Problemas de arranque primavera parámetros de recepción en el cliente envía una solicitud para transferir datos

referencia combinado Cipian Spring Framework Notas del estudio (9) - Interfaz de conocimientos de diseño específico de la API y Codificación

Cuando se utiliza la primavera de arranque recibir parámetros, encontramos muchos problemas antes había sido ocupado recientemente pocas investigaciones disponibles sobre este tema.

La mayoría de los artículos en línea, hablan de la forma en la primavera de arranque lograr parámetros aceptables, pero no acerca de cómo llamar al cliente, Benpian uso Jsoup, okhttp3 y herramientas de prueba postwoman disparos, explicar cómo implementar la interfaz en el servidor, mientras que el cliente la forma de lanzamiento solicitudes y paso de parámetros

Hay cuatro tipos de presentación de solicitudes de

desarrollo web sólo puede ser empezar tienes dudas? No sólo conseguir y publicar estos dos?

En los últimos años parece popular interfaz de estilo de descanso, hay una variedad de maneras, de acuerdo a la función de distinguir

Sin embargo, en la actualidad sólo se utilizaron los siguientes cuatro formas GET, POST, palabras, borrado

En esencia, además de conseguir, otros que son la forma posterior deriva versiones llaman cuando sólo se tenga que modificar el nombre del método a (los ejemplos de código específico se pueden ver en el camino post)

obtener camino

introducción

A continuación, escribí una interfaz

Debido a que es una implementación local, la propiedad intelectual es localhost, contextPath llama requestdemo, el puerto por defecto 8080, por lo que es accesible urlhttp://localhost:8080/requestdemo/api/user/users

Puesto que estamos utilizando @RequestMappinganotaciones, que sí, pero qué manera tener acceso a los datos, como se muestra a continuación, cambiar a acceso posterior

Si desea obtener una forma especificada, puede utilizar @GetMappinganotaciones, Getmapping anotación es equivalente a dicha redacción, de hecho @RequestMapping("users",method = [(RequestMethod.GET)]), recibió atributo del método de anotación es un parámetro indexado

Obtener la manera especificada usando otra manera post, PUT, etc., no son el retorno de datos de modo, el código de error de paquete 405, como en la figura.

recibir datos

@GetMapping("select")
fun selectByPk(@RequestParam("id") ids:Int):User {
    println(ids)
    return User("zhangsan",19)
}

@GetMapping("select1")
fun selectByPk1(ids:Int) {
    println(ids)
}

La primera manera deben esta llamadas del cliente, puede introducir la dirección URL

http://localhost:8080/requestdemo/api/user/select?id=1

El segundo parámetro no se anota, por lo que por defecto de arranque de primavera al nombre de variable como parámetro, por lo que debe ser llamada con

http://localhost:8080/requestdemo/api/user/select1?ids=1

La siguiente captura de pantalla de error también ilustra completamente este punto

Consigue una petición iniciada por el código de cliente

El cliente envía una solicitud por escrito para obtener el código es relativamente simple, siempre y cuando podemos poner un empalme buena url

Jsoup:

Jsoup conseguir método es devolver un documento (objeto web, después de css se puede cribar para encontrar el nodo especificado, obteniendo de este modo el contenido)

//需要ignoreContentType,忽略content-type,否则会报错,拿不到服务器返回的数据
val doc= Jsoup.connect("http://localhost:8080/requestdemo/api/user/select?id=1")
            .ignoreContentType(true)
            .get()
//输出服务器返回json数据         
println(doc.body().text())

Okhttp3:

val client = OkHttpClient()
val request = Request.Builder()
        .url("http://localhost:8080/requestdemo/api/user/select?id=1")
        .get()
        .build()
val call = client.newCall(request)
call.enqueue(object :Callback{
    override fun onFailure(call: Call, e: IOException) {

    }

    override fun onResponse(call: Call, response: Response) {
        println(response.body()?.string())
    }
})

manera del poste

comentario @RequestParam

@RequestParam para el procesamiento de Content-Type: application del GET presentación codificada urlencoded-x-www-form contenido /, POST.

Tiene las siguientes interfaces:

@PostMapping("update")
fun update(@RequestParam map: HashMap<String,String>) {
    //输出传入的key和value
    for (mutableEntry in map) {
        println(mutableEntry.key + "=" + mutableEntry.value)
    }
}

PD: no pueden notas RequestParam omitido, de lo contrario el servidor back-end no recibe datos

Usar interfaz de comprobación postwoman:

Tenga en cuenta que el formato de datos de los datos del formulario de esta manera es application / x-www-form- urlencoded

Jsoup:

val dataMap = hashMapOf("name" to "zhangsag","age" to 11.toString())
val doc= Jsoup.connect("http://localhost:8080/requestdemo/api/user/update")
        .ignoreContentType(true)
        .data(dataMap)
        .post()
//输出结果      
 println(doc.body().text())     

El método de los datos puede ser aceptable Jsoup Map <String, String>, o par clave-valor en el ejemplo anterior el código siguiente se puede cambiar

val doc= Jsoup.connect("http://localhost:8080/requestdemo/api/user/update")
            .ignoreContentType(true)
            .data("name","zhangsan")
            .data("age",12.toString())
            .post()
//输出结果          
 println(doc.body().text())         

Okhttp3:

fun sendPostRequest(){
    val url ="http://localhost:8080/requestdemo/api/user/update"
    val client = OkHttpClient()
    val formBodyBuilder = FormBody.Builder()
    formBodyBuilder.add("names", "zhangsxx")
    formBodyBuilder.add("ages", "19")
    val request = Request.Builder()
            .url(url)
            .post(formBodyBuilder.build())
            .build()
    val call = client.newCall(request)
    call.enqueue(object : Callback{
        override fun onFailure(call: Call, e: IOException) {

        }

        override fun onResponse(call: Call, response: Response) {
            
        }

    } )
}

Hay un pequeño problema no entiende, si la interfaz es similar a la siguiente, el cliente debe ser cómo pasar datos? Probé se dan varios métodos, dice que es incapaz de escribir en Cadena Tipo de usuario , no es que no se pasa este enfoque?

Dios quiere tener un gran paso puede ayudar a responder

@PostMapping("update2")
fun update2(@RequestParam user: User) {
    println(user.toString())
}

comentario @RequestBody

A veces, tenemos que pasar una cadena JSON, tenemos que utilizar este comentario

Se @RequestBody aceptar un objeto de cadena JSON, no es el objeto JSON

Tenemos una de las siguientes interfaces:

@PostMapping("update1")
fun update1(@RequestBody user:User) {
    println(user.toString())
}

Pasamos los datos JSON en el cliente, después del arranque de la primavera llamará automáticamente a Jackson marco, los datos de cadena JSON en las clases de entidad

Jsoup:

val json = "{\"name\":\"zhangs\",\"age\":18}"
val doc= Jsoup.connect("http://localhost:8080/requestdemo/api/user/update1")
        .requestBody(json)
        .header("content-type","application/json")
        .post()

jsoup necesidad de sumar el comunicado solicitud se transmite datos de cadena JSON, por analogía, otras formas de transferencia sólo es necesario cambiar el valor del tipo de contenido a otras formas de

OkHttp3:

val json = "{\"name\":\"zhangs\",\"age\":18}"
val client = OkHttpClient()
val request = Request.Builder()
        .url("http://localhost:8080/requestdemo/api/user/update1")
        .post(RequestBody.create(MediaType.parse("application/json"),json))
        .build()
val call = client.newCall(request)
call.enqueue(object :Callback{
    override fun onFailure(call: Call, e: IOException) {

    }

    override fun onResponse(call: Call, response: Response) {
        println(response.body()?.string())
    }
})

Aquí algo similar a la okhttp anteriormente, los datos de parámetros no es la misma en el interior del método post

@RequestParam -> application / x-www-form-urlencoded -> FormBody

@RequestBody -> application / json -> RequestBody

Por analogía, si se trata de formato XML o en formato binario deben ser utilizados para construir los datos RequestBody, puede operar en su propio aspecto específico, ya no hay demuestra

¿Cómo poner, a modo de borrado de escritura

Jsoup:

val json = "{\"name\":\"zhangs\",\"age\":18}"
val doc= Jsoup.connect("http://localhost:8080/requestdemo/api/user/update1")
        .requestBody(json)
        .header("content-type","application/json")
        .method(xx)
        .post()

Se añadió a la método en el método, la cifra es de valores opcionales:

Okhttp3, sólo toma el procedimiento de después de cambiar o método delete se pueden poner

val json = "{\"name\":\"zhangs\",\"age\":18}"
val client = OkHttpClient()
val request = Request.Builder()
        .url("http://localhost:8080/requestdemo/api/user/update1")
        //put或delete
        .put(RequestBody.create(MediaType.parse("application/json"),json))
        .build()
val call = client.newCall(request)
call.enqueue(object :Callback{
    override fun onFailure(call: Call, e: IOException) {

    }

    override fun onResponse(call: Call, response: Response) {
        println(response.body()?.string())
    }
})

código de petición ajax se transfiere (añadido)

Si ajax siguientes códigos:

var sg = 'UDZRb1loVWQFDAI9BTVcYFc6ADRTNQo8UWBQY1I5ASYBdVU_aXTEAYQdpBGEGagI2Vj4HO1Q7VmI_c';
$.ajax({
    type : 'post',
    url : '/ajaxm.php',
    data : { 'action':'downprocess','sign':sg,'ves':1 },
    dataType : 'json',
    success:function(msg){
        var date = msg;
        ...

Dichas solicitudes deben estar en postwoman:

Código Jsoup:

//我这里不加头部,也可以获取到数据
val postUrl = "https://www.lanzous.com/ajaxm.php"
val params = LinkedHashMap<String, String>()
params["action"] = "downprocess"
params["sign"] = sign
params["ves"] = "1"

val result = Jsoup.connect(postUrl)
        .data(params)
        .post()
        .html()

referencia

frombody la POST
tipo SpringBoot aparece el contenido 'archivo application / x-www-form-urlencoded;. charset = UTF-8' no compatible
OKHTTP3 simple de usar (c) el método POST

Supongo que te gusta

Origin www.cnblogs.com/stars-one/p/12506469.html
Recomendado
Clasificación