Spring Boot выдает ошибку CORS, когда PathVariable кодируется из-за специальных символовJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Spring Boot выдает ошибку CORS, когда PathVariable кодируется из-за специальных символов

Сообщение Anonymous »

Я хочу создать конечную точку в Spring Boot, которая предоставит мне подробную информацию об объекте. Контроллер на данный момент выглядит так:

Код: Выделить всё


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);
}
}
Я использую аннотацию @PathVarible, чтобы получить идентификатор объекта из URI.
Моя конфигурация 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





Я использую JDK 18.


Подробнее здесь: https://stackoverflow.com/questions/759 ... al-charact
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»