У меня есть интерфейс, который дает мне запрос и тип.
Типы - JSON и XML. Как я могу создать и отправить файл загрузки в сообщение ajax?
@RestController
public class RestCtrl {
@Autowired
JdbcTemplate jdbcTemplate;
@GetMapping("/getData")
List<Map<String, Object>> getData(@RequestParam String type, @RequestParam String query) {
System.out.println(type + " " + query);
List<Map<String, Object>> data = jdbcTemplate.queryForList(query);
if (type.equals("JSON")) {
}
else if (type.equals("XML")){
}
}
}
В основном XML будет иметь имена столбцов в <>, например <TITLE>This is a title</TITLE> I, это SOAP, верно?
Примерно так: https://flowgear-wpengine.netdna-ssl.com/wp-content/uploads/2016/12/XML-vs-JSON1.png
Обновлено: ничего подобного




Вам не нужно беспокоиться о возвращаемом типе носителя, spring сделает это за вас, вам нужно добавить `` производит '' в конечную точку отдыха.
@RequestMapping(value = "getData", method = RequestMethod.GET , produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE})
List<Map<String, Object>> getData(@RequestParam String type, @RequestParam String query) {
вам может потребоваться добавить формат данных Джексона для неявного отображения POJO в XML
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
Из веб-документации Spring:
You can narrow the request mapping based on the Accept request header and the list of content types that a controller method produces.
You can narrow the request mapping based on the Content-Type of the request.
Запрос
Клиентское приложение может управлять форматом mime данных запроса POST (XML, JSON) с помощью HTTP-заголовка Content-Type. Например:
Content-Type: application/json определит, что данные запроса предоставляются в формате JSON.Content-Type: text/xml определит, что данные запроса предоставляются в формате XML.Серверное приложение может контролировать, какой формат MIME оно может обрабатывать, используя атрибут consumes аннотации @PostMapping:
@PostMapping(path = "/pets", consumes = "application/json")
public void addPet(@RequestBody Pet pet) {
// ...
}
Если значение заголовка Content-Type не соответствует значению атрибута потребителя, Spring создаст исключение, что он может обрабатывать входные данные.
Ответ
Клиентское приложение может управлять форматом mime данных ответа (XML, JSON) с помощью HTTP-заголовка Accept. Например:
Accept: application/json определит, что клиент может принимать данные, предоставленные в формате JSON.Accept: text/xml определит, что клиент может принимать данные в формате XML.Серверное приложение может контролировать, какой формат MIME оно может обрабатывать, используя атрибут produces в @RequestMapping, @GetMapping и других аннотациях:
@GetMapping(path = "/pets/{petId}", produces = "application/json;charset=UTF-8")
@ResponseBody
public Pet getPet(@PathVariable String petId) {
// ...
}
Если значение заголовка «Принять» не соответствует значению атрибута «производит», Spring сгенерирует исключение, что может обрабатывать входные данные.
Spring определил полезные константы для широко используемых mime-типов:
MediaType.APPLICATION_XML_VALUE
MediaType.APPLICATION_JSON_VALUE
Полный список значений см. В документации: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/http/MediaType.html
consumes и produces - многозначные атрибуты. В виде списка можно указать несколько значений:
@GetMapping(path = "/pets/{petId}", produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE})
Это может помочь, но это неполно. Мне нужно выполнить запрос, и файл должен быть загружен из внешнего интерфейса