0

我遇到了内容协商的问题,我正在尝试解决它,但不知道具体如何。所以,我有端点:

 @PostMapping(value = "/v2/transaction", consumes = MediaType.ALL_VALUE, produces = {"application/xml", "application/json"})
    public @ResponseBody
    ResponseEntity<TransactionResponse> executeTransaction(@RequestBody TransactionRequest request) {

        printerService.printRequestLog(request);

        TransactionResponse response = null;
        try {
            response = bhnProcessingService.processTransaction(request);
        } catch (GsStatusCodeException gse) {
            Map<String, String> responseMap = gse.getResponseMap();
            response = gsStatusCodeException.gsStatusCodeExceptionHandling(responseMap, request);
            bhnResponseService.save(bhnResponseMapper.dtoToEntity(response));
            printerService.printResponseLog(response);
            return ResponseEntity.ok(response);
        }
        printerService.printResponseLog(response);
        return ResponseEntity.ok(response);
    }

我知道consumes并且produces没有必要,但它是项目风格的语法,所以我保持原样。有这样的要求:

@XmlRootElement(name = "request")
@JsonRootName("request")
public class TransactionRequest implements Serializable {

    private static final long serialVersionUID = -4928904121335557260L;

    public BhnHeader header = new BhnHeader();
    public BhnTransaction transaction = new BhnTransaction();

}

传入的请求需要转换为另一个对象(简单的 DTO)并通过 SOAP 发送到端服务器。然后,当我收到来自 SOAP 服务器的响应时,传出 DTO 我将转换回与请求类型相同的对象并发送给请求发起者。如果是请求,JSON则响应应该是JSON,与 相同XML。而且我不知道该怎么做。我找到了一些指南,但它们都包含 Spring MVC。就像是:

@Configuration
@EnableWebMvc
public class RestApiApplication extends WebMvcConfigurerAdapter {

@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {

   configurer.favorPathExtension(false).
   favorParameter(true).
   ignoreAcceptHeader(false).
   useJaf(false).
   defaultContentType(MediaType.APPLICATION_XML).
   mediaType("xml", MediaType.APPLICATION_XML).
   mediaType("json", MediaType.APPLICATION_JSON);
}

查看 pom.xml:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.5.0</version>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${spring-boot.starter.web.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web-services</artifactId>
            <version>${spring-boot.starter.ws.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
            <version>2.5.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-oxm</artifactId>
            <version>${spring.oxm.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>${jackson-dataformat.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <version>${spring-boot.data.jpa.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>${spring-boot.starter.test}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons-lang3.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.ws</groupId>
            <artifactId>spring-ws-core</artifactId>
            <version>${spring.ws.version}</version>
        </dependency>
        <!--Mapper-->
        <dependency>
            <groupId>net.sf.dozer</groupId>
            <artifactId>dozer</artifactId>
            <version>5.5.1</version>
        </dependency><!--todo replace because it too old lib-->
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct</artifactId>
            <version>1.4.2.Final</version>
        </dependency>
        <!--Database MsSql-->
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <version>9.4.0.jre8</version>
        </dependency>
        <dependency>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-core</artifactId>
            <version>4.4.2</version>
        </dependency>
        <dependency>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-groovy-dsl</artifactId>
            <version>3.0.2</version>
        </dependency>
        <dependency>
            <groupId>wsdl4j</groupId>
            <artifactId>wsdl4j</artifactId>
        </dependency>
    </dependencies>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>jaxb2-maven-plugin</artifactId>
                <version>1.6</version>
                <executions>
                    <execution>
                        <id>xjc</id>
                        <goals>
                            <goal>xjc</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <schemaDirectory>src/main/resources/schemas</schemaDirectory>
                    <schemaFiles>CPAMOPP.xsd</schemaFiles>
                    <outputDirectory>src/main/java</outputDirectory>
                    <packageName>ch.loyalty.amopp.jaxb</packageName>
                    <clearOutputDir>false</clearOutputDir>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>add-source</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>add-source</goal>
                        </goals>
                        <configuration>
                            <sources>
                                <source>${basedir}/target/generated-sources</source>
                            </sources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.5.0</version>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>

                </configuration>
            </plugin>
        </plugins>
        <finalName>transactionManagement</finalName>
    </build>

你能给我一些关于如何解决这个问题的建议吗?欣赏它!PS并不意味着硬编码。通常情况下:截止日期是昨天......

4

1 回答 1

0

解决方案:我添加@RequestHeaders HttpHeaders httpHeaders到方法参数中,它让我有机会检查所有 HTTP 标头。每个 HTTP 请求都至少需要我的任务标头之一:内容类型或接受。所以,它适用于我和我的问题。希望任何人也可以使用它。

于 2021-10-07T11:06:41.243 回答