Для начала я прочитал это:
Spring boot - установка содержимого по умолчанию заголовок -type, если его нет в запросе
Старая версия этого работала при весенней загрузке 1. Однако при получении запроса со следующим заголовком принятия Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2"
Ответ в json.
я поставил в классе
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {
@Override
public void configureContentNegotiation(
ContentNegotiationConfigurer configurer) {
configurer.defaultContentType(MediaType.APPLICATION_XML);
}
}
И я вижу, что устанавливается стратегия defaultContentType. Однако он перезаписывается стратегией AcceptHeaderConfig.
Похоже, что defaultContentType используется только как запасной вариант.
Обратите внимание, что тот же код в весенней загрузке 1 работал и по умолчанию использовал XML.
Полный пример
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.servlet.http.HttpServletRequest;
import javax.xml.bind.annotation.XmlRootElement;
@SpringBootApplication
@RestController
public class CnApp {
@RequestMapping("/")
public Person person(HttpServletRequest request, ModelMap model){
return new Person();
}
public static void main(String[] args) throws Exception {
SpringApplication.run(CnApp.class, args);
}
@XmlRootElement
public static class Person {
public String firstName = "Jon";
public String lastName = "Doe";
}
@Configuration
public static class ServerConfig implements WebMvcConfigurer {
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.defaultContentType(MediaType.APPLICATION_XML);
}
}
}
как вы можете видеть, запустив curl localhost:8080 -H"Accept: text/html, image/gif, image/jpg;q=0.2, */*;q=0.2"
По умолчанию используется json, хотя по умолчанию используется XML
Из комментария, который я разместил ниже
Проблема в старой версии Spring, которую мы можем отправить с заголовком accept и получить запросы, для которых по умолчанию используется XML. Однако JSON по-прежнему поддерживается.
Поэтому, когда приходит заголовок accept, который поддерживает как JSON, так и XML с одинаковой специфичностью, нам нужно вернуть XML.