当前位置: 首页 > 知识库问答 >
问题:

如何在micronaut声明性客户端中接收空响应?

轩辕鸿祯
2023-03-14

我正在发送一个PATCH请求到一个服务器,它给了我一个200,没有身体(完全可以接受),但是我无法解决如何配置micronaut@Patch注释来处理这个问题。无论我尝试什么,它都试图将空响应解码为JSON(至少我认为这是它正在做的,因为它给出了一个意想不到的错误,而不是当身体出错时得到的正常杰克逊错误)。我在微型文档中找不到任何关于如何做到这一点的东西。

共有1个答案

陶琦
2023-03-14

我正在向一台服务器发送一个补丁请求,该服务器返回一个200和无正文(完全可以接受),但是我无法确定如何配置micronaut@PATCH注释来处理这个问题

我认为这将适用于@Patch,就像它适用于其他动词一样。

查看项目https://github.com/jeffbrown/patchwithemptyresponse.

server/src/main/java/server/DemoController。JAVA

package server;

import io.micronaut.http.HttpResponse;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Patch;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Controller("/demo")
public class DemoController {
    static final Logger log = LoggerFactory.getLogger(DemoController.class);

    @Patch
    HttpResponse doSomething() {
        log.info("Returning an empty response with status code 200");
        return HttpResponse.ok();
    }
}

client/src/main/java/client/DemoClient。JAVA

package client;

import io.micronaut.http.HttpResponse;
import io.micronaut.http.annotation.Patch;
import io.micronaut.http.client.annotation.Client;

@Client("http://localhost:8080")
public interface DemoClient {

    @Patch("/demo")
    HttpResponse callServer();
}

客户端/src/main/java/Client/ClientCommand.java

package client;

import io.micronaut.configuration.picocli.PicocliRunner;
import io.micronaut.context.ApplicationContext;

import jakarta.inject.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import picocli.CommandLine;
import picocli.CommandLine.Command;
import picocli.CommandLine.Option;
import picocli.CommandLine.Parameters;

@Command(name = "client", description = "...",
        mixinStandardHelpOptions = true)
public class ClientCommand implements Runnable {

    static final Logger log = LoggerFactory.getLogger(ClientCommand.class);

    @Inject
    DemoClient client;

    public static void main(String[] args) throws Exception {
        PicocliRunner.run(ClientCommand.class, args);
    }

    public void run() {
        log.info("Before calling server.");
        client.callServer();
        log.info("After calling server");
    }
}

如果您运行服务器,您可以运行客户端,并看到一个空体的成功往返。

~ $ git clone git@github.com:jeffbrown/patchwithemptyresponse.git
Cloning into 'patchwithemptyresponse'...
remote: Enumerating objects: 51, done.
remote: Counting objects: 100% (51/51), done.
remote: Compressing objects: 100% (31/31), done.
remote: Total 51 (delta 4), reused 51 (delta 4), pack-reused 0
Receiving objects: 100% (51/51), 65.64 KiB | 1.04 MiB/s, done.
Resolving deltas: 100% (4/4), done.

运行服务器:

~ $ cd patchwithemptyresponse 
patchwithemptyresponse (main)$ ./gradlew server:run

> Task :server:compileJava
Note: Creating bean classes for 1 type elements

> Task :server:run
 __  __ _                                  _   
|  \/  (_) ___ _ __ ___  _ __   __ _ _   _| |_ 
| |\/| | |/ __| '__/ _ \| '_ \ / _` | | | | __|
| |  | | | (__| | | (_) | | | | (_| | |_| | |_ 
|_|  |_|_|\___|_|  \___/|_| |_|\__,_|\__,_|\__|
  Micronaut (v3.1.0)

18:17:56.201 [main] INFO  io.micronaut.runtime.Micronaut - Startup completed in 748ms. Server Running: http://localhost:8080

运行客户端:

~ $ cd patchwithemptyresponse 
patchwithemptyresponse (main)$ 
patchwithemptyresponse (main)$ ./gradlew client:run
Starting a Gradle Daemon, 1 busy and 1 incompatible and 1 stopped Daemons could not be reused, use --status for details

> Task :client:compileJava
Note: Creating bean classes for 2 type elements

> Task :client:run
18:18:34.618 [main] INFO  i.m.context.env.DefaultEnvironment - Established active environments: [cli]
18:18:34.908 [main] INFO  client.ClientCommand - Before calling server.
18:18:35.680 [main] INFO  client.ClientCommand - After calling server
 类似资料:
  • 我将使用来自Micronaut文档(声明性Http客户端)的代码-我正在使用Spock 宠物手术。JAVA 我有一个声明式客户端: 我的目标是当我运行一个测试类时,我想调用(@Replaces)另一个类(PetDummy),而不是PetClient,PetDummy类位于我的测试文件夹中 测试类: 然而,在调用PetClient的最后,我也尝试了@Factory注释,但没有成功 PetClient

  • Feign是一个声明式的Web服务客户端。这使得Web服务客户端的写入更加方便 要使用Feign创建一个界面并对其进行注释。它具有可插入注释支持,包括Feign注释和JAX-RS注释。Feign还支持可插拔编码器和解码器。Spring Cloud增加了对Spring MVC注释的支持,并使用Spring Web中默认使用的HttpMessageConverters。Spring Cloud集成Ri

  • 我希望能够使用Micronaut的声明性客户端,根据我是在本地开发环境还是在生产环境中,找到不同的endpoint。 我在中设置客户端的基本uri: 阅读来自Micronaut的文档,他们让开发人员跳过了相当多的障碍,将动态值输入到实际客户端。它们实际上很混乱。所以我创建了这样的配置: 但是正如您所看到的,这实际上并不是从中读取任何值,它只是将const值设置为类的静态值。我希望值根据我所处的环境

  • 问题内容: 我有一个Java控制器,必须向我发送一些文本数据和不同的字节数组。因此,我正在构建n多部分请求,并将其写入到HttpServletResponse的流中。 现在我的问题是如何在客户端解析响应并提取多个部分。 服务器代码片段:- 客户代码片段:- 我检查了CloseableHttpResponse和HttpEntity,但是它们都不提供解析多部分请求的方法。 编辑1:这是我在客户端流中收

  • 我有一个java控制器,它必须向我发送一些文本数据和不同的字节数组。因此,我正在构建一个多部分请求,并将其从HttpServletResponse写入流。 现在我的问题是如何在客户端解析响应并提取多个部分。 服务器代码片段:- 客户端代码段:- 我检查了CloseableHttpResponse和HttpEntity,但它们都没有提供解析多部分请求的方法。 编辑1:这是我在客户端流中收到的示例响应

  • 尝试使用Micronaut声明性客户端上传多个文件。 http客户端 将多个文件添加到多部分 产品控制器 例外