- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在运行一个 Spring Boot 应用程序,我已经注册了一个名为 CsvCompactVenueHttpMessageConverter
的新 HttpMessageConverter
,这是它的代码:
@Component
public class CsvCompactVenueHttpMessageConverter extends
AbstractHttpMessageConverter<Collection<CompactVenue>> {
public CsvCompactVenueHttpMessageConverter() {
super(MediaType.valueOf(TEXT_CSV));
}
>> message converter implementation code <<
}
它扩展了 AbstractHttpMessageConverter
并在类 WebConfiguration
上注册为一个 bean:
@Configuration
public class WebConfiguration extends WebMvcConfigurerAdapter {
@Bean
public CsvCompactVenueHttpMessageConverter csvCompactVenueHttpMessageConverter() {
return new CsvCompactVenueHttpMessageConverter();
}
}
然后我有一个名为 FoursquareResource
的休息资源:
@RestController
@RequestMapping("/foursquare")
public class FoursquareResource {
@Autowired
FoursquareService foursquareService;
@GetMapping(value = "/{location}", produces = {"application/json", "text/csv"})
public Collection<CompactVenue> searchVenuesByLocationAndIncreasingRange(@PathVariable String location, @RequestParam(defaultValue = "1") Integer numQueries) throws FoursquareApiException, FoursquareServiceException {
return foursquareService.searchVenuesByLocationAndIncreasingRange(location, numQueries);
}
}
当我运行应用程序并调用 http://localhost:8080/foursquare/New York NY
时,它工作正常并呈现 text/csv
响应。
但是当使用 RestAssured 和 @SpringBootTest
运行测试时,我得到一个 HTTP 406 响应(因为我认为它没有正确注册 HttpMessageConverter
for text/csv
),这里是代码:
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class FoursquareResourceTest {
@Mock
FoursquareService foursquareService;
@InjectMocks
FoursquareResource foursquareResource;
@Before
public void before() throws Exception {
CompactVenue venue = new CompactVenue();
FieldUtils.writeField(venue, "id", "aUfmEW745", true);
Collection<CompactVenue> venues = new ArrayList<>();
venues.add(venue);
when(foursquareService.searchVenuesByLocationAndIncreasingRange(any(), any())).thenReturn(venues);
}
@Test
public void testSearchVenuesByLocationAndIncreasingRangeCsv() throws Exception {
MockMvcResponse response =
given().
accept("text/csv").
standaloneSetup(foursquareResource).
when().
get(String.format("/foursquare/%s?numQueries=%d",location,numQueries)).
then().
statusCode(200).
extract().response();
log.info(response.body().print());
}
我不确定为什么在运行 Spring Boot 应用程序时会得到正确答案,但在作为测试运行时会出现 406 错误。看起来新的 HttpMessageConverter
没有在测试中注册,但我不明白为什么。谢谢和问候。
最佳答案
406 Not Acceptable
仅表示 Controller 无法提供客户端请求的表示。在您的情况下,客户端通过发送 Accept
header 指示其读取 text/csv
的能力,但 Controller 无法发送 text/csv
背部。很可能缺少您的转换器。要理解原因,了解关于 MockMvc
的一件事很重要。目前尚不清楚您的 MockMvc
是如何初始化的,但我认为它是独立设置。请注意,standaloneSetup
创建了一个新 应用程序上下文,您的标准配置中的 bean 未在其中注册,包括您的自定义转换器。这解释了为什么代码在“正常”运行中工作,但在测试中失败。为了克服这个问题,要么使用注入(inject)应用程序上下文的webAppContextSetup
(它将启动应用程序和嵌入式 Jetty/Tomcat),要么通过调用 StandaloneMockMvcBuilder 上的
。例如,setMessageConverters
手动设置转换器
mockMvc = MockMvcBuilders
.standaloneSetup(controller)
.setMessageConverters(new SomeConverter(),
new SomeOtherConverter())
.build();
然后您可以在您的 REST Assure 中重用 mockMvc
对象,只需调用
RestAssuredMockMvc.mockMvc(mockMvc);
关于Spring Boot 在测试运行期间不注册 HttpMessageConverter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43335072/
我正在编写一个客户端来使用 RESTful 服务。我需要以键值对的形式发送请求,他们建议我为此使用 Map。我调用的 RESTful 服务只接受 JSON,我的客户端将使用 Java。它实际上将成为现
我正在尝试获取 ResponseEntity with spring rest 模板,如下所示。我收到以下错误, Caused by: org.springframework.web.client.R
我想创建一个 RuntimeException 并设置 HTTP 状态和文本。有一个创建文本的 textService。 看了很多帖子,还是没明白。 我不能像这样在构造函数中使用 Autowiring
使用 Spring ,使用此代码: List> messageConverters = restTemplate.getMessageConverters(); for(HttpMessageConv
1、HttpMessageConverter 1、ResponseBody 2、RequestEntity 3、@ResponseBody 4、SpringMVC处理json 5、SpringMVC处
我正在运行一个 Spring Boot 应用程序,我已经注册了一个名为 CsvCompactVenueHttpMessageConverter 的新 HttpMessageConverter,这是它的
我有一个 Spring mvc @RestController 类,其中方法参数用 @RequestBody 注释。像这样: @RestController @RequestMapping("/fea
当在入站网关中使用消息转换器发生转换错误时,我遇到了奇怪的行为。下面示例中的想法是接收 XML 有效负载(或序列化 java),将它们转换为 java 对象并使用相同的媒体类型进行响应。 鉴于此配置:
我有一个基于 Spring MVC 的 Rest Web 服务。我用@RestControllerAdvice处理从我的 @Controller 抛出的异常s。 Controller 调用示例如下
读取数据时,Spring HttpMessageConverter 必须如何处理无效的 EOF?也就是说,在这种情况下,Spring MVC 的其余部分如何期望客户转换器发出错误请求信号? 实现读取数
编辑:错误发生在客户端而不是服务器。响应正文正在写入,但客户端未在 400 响应上读取它。 我有一个自定义消息转换器来生成 text/csv , application/csv来自ErrorRespo
我在客户端和服务器上都设置了使用 Jaxb2 的 MarshallingMessageConverter 关注 this问题。 这是在服务器端: @Configuration @EnableWebMv
我正在尝试在 Spring Boot 中解析以下 xml 响应: 响应结构: 来自服务的 API 调用: RestTemplate restTemplate = new RestTem
现在我正在使用 Spring MVC,我遇到并发出一些 Controller 方法没有返回数据并抛出 HttpMediaTypeNotAcceptableException 的问题。我的方法产生了te
我正在编写一个必须调用休息服务的 spring mvc 应用程序(Spring 新手)。我在我的 VM(Linux 中的 weblogic 10.3.6)中部署了其余服务,我正在编写的应用程序在我的本
首先,对于可能的重复,我们深表歉意。我发现了一些关于类似问题的问题。但是,我仍然无法弄清楚我的具体情况出了什么问题。 因此,来自服务器的示例 json: [ { "_id": "55f96
在实现 RESTful API 时,我将所有数据包装在一个对象中,因此它看起来像这样。 {error: null, code: 200, data: {...actual data...}} 这导致我
我正在使用 spring android rest 模板 并尝试将 JSON 响应转换为 java 类,如图所示 here . 这是我尝试完成这项工作的代码 fragment : RestTe
我正在尝试使用 Spring for Android rest client 通过 http post 发送数据,以避免创建和解析 json 数据。 来自他们的 manual他们有以下方法: rest
我正在将 JAXB 对象发布到 REST 服务。生成的类没有 XMLRootElement,因此我使用 Object Factory createXMl 方法创建它。当我手动添加 XMLRootEle
我是一名优秀的程序员,十分优秀!