Micronaut 接收請求的 Content-Type

2023-03-06 13:48 更新

默認情況下,Micronaut 控制器操作使用 application/json。 @Consumes 注釋或任何 HTTP 方法注釋的 consumes 成員支持使用其他內(nèi)容類型。

 Java Groovy  Kotlin 
import io.micronaut.context.annotation.Requires;
import io.micronaut.http.HttpResponse;
import io.micronaut.http.MediaType;
import io.micronaut.http.annotation.Consumes;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Post;

@Controller("/consumes")
public class ConsumesController {

    @Post // (1)
    public HttpResponse index() {
        return HttpResponse.ok();
    }

    @Consumes({MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_JSON}) // (2)
    @Post("/multiple")
    public HttpResponse multipleConsumes() {
        return HttpResponse.ok();
    }

    @Post(value = "/member", consumes = MediaType.TEXT_PLAIN) // (3)
    public HttpResponse consumesMember() {
        return HttpResponse.ok();
    }
}
import io.micronaut.context.annotation.Requires
import io.micronaut.http.HttpResponse
import io.micronaut.http.MediaType
import io.micronaut.http.annotation.Consumes
import io.micronaut.http.annotation.Controller
import io.micronaut.http.annotation.Post

@Controller("/consumes")
class ConsumesController {

    @Post // (1)
    HttpResponse index() {
        HttpResponse.ok()
    }

    @Consumes([MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_JSON]) // (2)
    @Post("/multiple")
    HttpResponse multipleConsumes() {
        HttpResponse.ok()
    }

    @Post(value = "/member", consumes = MediaType.TEXT_PLAIN) // (3)
    HttpResponse consumesMember() {
        HttpResponse.ok()
    }
}
import io.micronaut.context.annotation.Requires
import io.micronaut.http.HttpResponse
import io.micronaut.http.MediaType
import io.micronaut.http.annotation.Consumes
import io.micronaut.http.annotation.Controller
import io.micronaut.http.annotation.Post

@Controller("/consumes")
class ConsumesController {

    @Post // (1)
    fun index(): HttpResponse<*> {
        return HttpResponse.ok<Any>()
    }

    @Consumes(MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_JSON) // (2)
    @Post("/multiple")
    fun multipleConsumes(): HttpResponse<*> {
        return HttpResponse.ok<Any>()
    }

    @Post(value = "/member", consumes = [MediaType.TEXT_PLAIN]) // (3)
    fun consumesMember(): HttpResponse<*> {
        return HttpResponse.ok<Any>()
    }
}
  1. 默認情況下,控制器操作使用 Content-Type 類型為 application/json 的請求。

  2. @Consumes 注釋為傳入請求采用支持媒體類型的 String[]。

  3. 內(nèi)容類型也可以使用方法注釋的 consumes 成員指定。

自定義處理的內(nèi)容類型

通常 JSON 解析僅在內(nèi)容類型為 application/json 時發(fā)生。其他 MediaTypeCodec 類的行為類似,因為它們具有可以處理的預定義內(nèi)容類型。要擴展給定編解碼器處理的媒體類型列表,請?zhí)峁⒋鎯υ?nbsp;CodecConfiguration 中的配置:

 Properties Yaml  Toml  Groovy  Hocon  JSON 
micronaut.codec.json.additionalTypes[0]=text/javascript
micronaut.codec.json.additionalTypes[1]=...
micronaut:
  codec:
    json:
      additionalTypes:
        - text/javascript
        - ...
[micronaut]
  [micronaut.codec]
    [micronaut.codec.json]
      additionalTypes=[
        "text/javascript",
        "..."
      ]
micronaut {
  codec {
    json {
      additionalTypes = ["text/javascript", "..."]
    }
  }
}
{
  micronaut {
    codec {
      json {
        additionalTypes = ["text/javascript", "..."]
      }
    }
  }
}
{
  "micronaut": {
    "codec": {
      "json": {
        "additionalTypes": ["text/javascript", "..."]
      }
    }
  }
}

目前支持的配置前綴有json、json-stream、text、text-stream。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號