java - 从 http 链接映射 http 参数

标签 java spring spring-boot spring-mvc spring-security

我有一个想要映射的传入请求:

http://some_domain.com?key=value&t5052&key=value&key=value

我有这个 Spring 配置:

端点:

@PostMapping(consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, value = "/v1/notification")
  public ResponseEntity<String> handleNotifications(@RequestBody MultiValueMap<String, Object> keyValuePairs) {
     .....
    return new ResponseEntity<>(HttpStatus.OK);
  }

Spring 转换配置:

@SpringBootApplication(scanBasePackages = { "org.rest.api.*", "org.plugin.service", "org.plugin.transactions.factory" })
@EntityScan("org.plugin.entity")
@EnableJpaRepositories("org.plugin.service")
@EnableScheduling
public class Application extends SpringBootServletInitializer implements WebMvcConfigurer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.removeIf(converter -> converter instanceof MappingJackson2XmlHttpMessageConverter);
        converters.removeIf(converter -> converter instanceof MappingJackson2HttpMessageConverter);
        converters.add(new MappingJackson2XmlHttpMessageConverter(
                ((XmlMapper) createObjectMapper(Jackson2ObjectMapperBuilder.xml()))
                        .enable(ToXmlGenerator.Feature.WRITE_XML_DECLARATION)));
        converters.add(new MappingJackson2HttpMessageConverter(createObjectMapper(Jackson2ObjectMapperBuilder.json())));
    }

    private ObjectMapper createObjectMapper(Jackson2ObjectMapperBuilder builder) {
        builder.indentOutput(true);
        builder.modules(new JaxbAnnotationModule());
        builder.serializationInclusion(JsonInclude.Include.NON_NULL);
        builder.defaultUseWrapper(false);
        return builder.build();
    }
}

但由于某种原因,这些值不匹配:

这是日志文件:

https://pastebin.com/GsFrw6s4

您知道映射值的正确方法是什么吗?

最佳答案

您可以使用@RequestParam来获取查询参数,通常@RequestBody用于获取Json或任何其他类型的body。

@PostMapping(consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, value = "/v1/notification")
public ResponseEntity handleNotifications(@RequestParam Map<String, Object> keyValuePairs) { // Chaged @RequestParam & Map
     // Logic
    return ResponseEntity.ok().build(); // To send 200 response
}

尝试后请告诉我。

关于java - 从 http 链接映射 http 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56769499/

相关文章:

java - 我在 Java 中的 JOptionPane 没有继续到下一个窗口?

java - 在 java 中的 try-catch block 之后使用 "finally"有什么好处?

java - 两个相关 for 循环的复杂度,外循环的复杂度为 log n

java - Spring Boot SOAP Web 服务的 EndpointNotFound 异常

java - Spring 和 AMQP RabbitMQ 主题交换不起作用

spring - EntityManager persist() 方法不向数据库插入记录

java - "SELECT... WHERE column > ?1"- 那是什么?

java - 带有事务轮询器 Java 配置的 Spring Integration JPA 入站 channel 适配器

java - 如何避免 SimpleMessageListenerContainer 在发生意外错误时关闭?

spring - 应用程序上下文异常 : Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean