मैं अपाचे ऊंट के साथ कुछ सरल एपीआई बनाकर प्रयोग करने की कोशिश कर रहा हूं। एक पोस्ट अनुरोध के लिए अनुरोध निकाय खाली है लेकिन ऊंट खराब अनुरोध वापस नहीं करता है बल्कि यह 201 देता है।
ये है जो मैं करता हूं;
- Studentreg-api.yaml से कक्षाएं उत्पन्न करें [यह एक वैध openapi 3 yaml दस्तावेज़ है]
- रेस्ट एंडपॉइंट बनाने के लिए ऊंट, स्प्रिंग बूट का उपयोग करना चरण
clientRequestValidation(true)
के साथ कॉन्फ़िगर किया गया ऊंट आराम समापन बिंदु- सर्वर शुरू करें
- यदि अनिवार्य विशेषताओं को उचित रूप से चिह्नित किया गया है, तो /एपीआई-डॉक्स खोलें और सत्यापित करें
- पोस्टमैन ने रिक्त अनुरोध निकाय के साथ पोस्ट एंडपॉइंट के लिए अनुरोध किया
अपेक्षित: 400 - गलत अनुरोध वास्तविक: 201
मुझे समझ नहीं आ रहा था कि मैं क्या खो रहा हूँ।
BaseRouteConfig.java
@ComponentScan
@Configuration
public class BaseRouteConfig extends RouteBuilder {
@Autowired
private Environment environment;
@Value("${studentregistration.api.path}")
private String basePath;
@Bean
ServletRegistrationBean servletRegistrationBean() {
ServletRegistrationBean servlet = new ServletRegistrationBean(new CamelHttpTransportServlet(), basePath + "/*");
servlet.setName("CamelServlet");
return servlet;
}
@Override
public void configure() throws Exception {
restConfiguration().component("servlet")
.bindingMode(RestBindingMode.json)
.dataFormatProperty("pretty-print", "true")
.enableCORS(true)
.port(environment.getProperty("server.port", "8085"))
.contextPath(basePath)
.apiContextPath("/api-docs")
.apiVendorExtension(true)
.apiProperty("api.title", "Student registration")
.apiProperty("api.version", "0.1")
.apiProperty("cors", "true")
.clientRequestValidation(true);
}
}
RegisterStudentRoute.java
@Component
public class RegisterStudentRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
rest("/api/").consumes(MediaType.APPLICATION_JSON_VALUE)
.produces(MediaType.APPLICATION_JSON_VALUE)
.post("/registration")
.type(RegisterStudentRequest.class)
.clientRequestValidation(true)
.outType(RegisterStudentResponse.class)
.responseMessage().code(HttpStatus.CREATED.value())
.endResponseMessage()
.route().routeId("create-student-registration")
.setHeader(Exchange.HTTP_RESPONSE_CODE, simple("201"))
.to("log:success")
.end().endRest();
}
}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>camel-rest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>camel-rest</name>
<description>Demo project for Spring Boot & camel rest</description>
<properties>
<java.version>16</java.version>
<camel.version>3.10.0</camel.version>
<openapi-generator.version>5.1.0</openapi-generator.version>
<springfox.version>2.9.2</springfox.version>
<jackson-databind.version>0.2.1</jackson-databind.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-servlet-starter</artifactId>
<version>3.9.0</version>
</dependency>
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-jackson-starter</artifactId>
<version>3.9.0</version>
</dependency>
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-openapi-java-starter</artifactId>
<version>3.9.0</version>
</dependency>
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-spring-boot-starter</artifactId>
<version>3.9.0</version>
</dependency>
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-http-starter</artifactId>
<version>3.9.0</version>
</dependency>
<dependency>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator</artifactId>
<version>${openapi-generator.version}</version>
</dependency>
<dependency>
<groupId>org.openapitools</groupId>
<artifactId>jackson-databind-nullable</artifactId>
<version>${jackson-databind.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${springfox.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.4.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<!-- RELEASE_VERSION -->
<version>5.1.0</version>
<!-- /RELEASE_VERSION -->
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${project.basedir}/src/main/resources/api.yaml</inputSpec>
<generatorName>spring</generatorName>
<apiPackage>com.sample.camel-rest.api</apiPackage>
<modelPackage>com.sample.camel-rest.model</modelPackage>
<supportingFilesToGenerate>
ApiUtil.java
</supportingFilesToGenerate>
<configOptions>
<delegatePattern>true</delegatePattern>
<outputDir>${project.basedir}/generated</outputDir>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
1 उत्तर
ठीक है! मैंने सत्यापन को संभालने का एक आसान तरीका निकाला है। बीन-सत्यापनकर्ता के लिए एक मार्ग जोड़ने से समस्या हल हो गई! यदि हमें कस्टम त्रुटि संदेश बनाने की आवश्यकता है या यदि आपको विफलताओं के आधार पर त्रुटि मॉडल बनाने की आवश्यकता है, तो आप ऊंट प्रोसेसर और javax.validator का उपयोग कर सकते हैं।
RegisterStudentRoute.java
@Component
public class RegisterStudentRoute extends RouteBuilder {
@Autowired
RegisterStudentRequestValidator registerStudentRequestValidator;
@Override
public void configure() throws Exception {
rest("/api/").consumes(MediaType.APPLICATION_JSON_VALUE)
.produces(MediaType.APPLICATION_JSON_VALUE)
.post("/registration")
.type(RegisterStudentRequest.class)
.clientRequestValidation(true)
.param().name("request-id").dataType("string")
.type(RestParamType.header).required(true)
.endParam()
.outType(RegisterStudentResponse.class)
.responseMessage().code(HttpStatus.CREATED.value())
.endResponseMessage()
.route().routeId("create-student-registration")
// .process(registerStudentRequestValidator)
.to("direct:validateReq")
.setHeader(Exchange.HTTP_RESPONSE_CODE, simple("201"))
.to("log:success")
.end().endRest();
from("direct:validateReq")
.to("bean-validator://x")
.to("mock:end");
}
संबंधित सवाल
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।