Код: Выделить всё
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.semdetect.server.entities.models.Entity;
import com.semdetect.server.entities.services.EntityService;
@RestController
@RequestMapping("api/entity")
public class EntityController {
private final EntityService entityService;
@Autowired
public EntityController(EntityService entityService) {
this.entityService = entityService;
}
@GetMapping("/{iri}")
public Entity getEntityByIri(@PathVariable String iri) {
System.out.println("In controller: " + iri);
return this.entityService.getEntityByIri(iri);
}
}
Моя конфигурация CORS выглядит следующим образом:
Код: Выделить всё
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@SpringBootApplication
public class ServerApplication {
public static void main(String[] args) {
SpringApplication.run(ServerApplication.class, args);
}
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("http://localhost:4200");
}
};
}
}
GET http://localhost:8080/api/entity/12345869
Он входит в контроллер, и консоль регистрирует идентификатор: 12345869.
До сих пор все нормально... но моя база данных является базой данных RDF, поэтому мои ID URI и выглядеть так:
Таким образом, мой запрос на самом деле будет выглядеть так, содержащий специальные символы:
GET http://localhost:8080/api/entity/
Из-за специальных символов я использую encodeURIComponent из JavaScript для кодирования переменной пути (https://developer.mozilla.org/en-US/doc ... IComponent):
Код: Выделить всё
http://localhost:8080/api/entity/${encodeURIComponent("\")}
Когда я делаю этот запрос с закодированной переменной пути... Spring Boot возвращает ошибку CORS, хотя с обычными идентификаторами это работает.
Я не знаю, как это решить проблема, можно ли каким-либо образом использовать строку типа в качестве переменной пути?
РЕДАКТИРОВАТЬ (КАК ЗАПРОС В КОММЕНТАРИЯХ):
POM:
Код: Выделить всё
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.7.1
com.sem-detect
server
0.0.1-SNAPSHOT
server
Demo project for Spring Boot
18
org.eclipse.rdf4j
rdf4j-bom
3.0.4
pom
import
org.springframework.boot
spring-boot-starter-thymeleaf
org.springframework.boot
spring-boot-starter-web
org.eclipse.rdf4j
rdf4j-client
pom
org.eclipse.rdf4j
rdf4j-repository-sparql
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-devtools
true
org.springframework.boot
spring-boot-maven-plugin
Подробнее здесь: https://stackoverflow.com/questions/759 ... al-charact
Мобильная версия