Я создал весенний стартовый проект в Eclipse. Большая часть кода была по этой ссылке https://www.logicbig.com/tutorials/spring-framework/spring-web-mvc/csv-msg-converter.html.
Я добавил конфигурацию согласования содержимого, чтобы принимать заголовки, расширение пути и параметры. Он прекрасно работает с почтальоном.
Но когда я пытаюсь в браузере http://localhost:8080/employeelist.csv. Во всех случаях CSV загружается в файл. Я хочу, чтобы он отображался в браузере. Я пытался установить расположение содержимого как встроенное в запросе сопоставления, заголовке выходного сообщения http, но CSV по-прежнему загружается.
Что мне делать, чтобы csv отображался в строке? Ранее я успешно отображал встроенный CSV в браузере, используя отдельный метод сопоставления запросов для CSV и заставляя метод возвращать void и принимать httpservletresponse в качестве параметра. Но я хочу использовать согласование контента и единый метод для всех форматов - XML, CSV, json. Какой бы формат не был выбран, он должен отображаться в браузере.
Возможно ли это?
Большое спасибо за ваше время.
Обновление: добавлены части кода, которые были отредактированы
package ti.projects;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import java.util.List;
@SuppressWarnings("deprecation")
@EnableWebMvc
@Configuration
@ComponentScan("ti.projects")
public class AppConfig extends WebMvcConfigurerAdapter {
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new CsvHttpMessageConverter<>());
}
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.favorPathExtension(true).favorParameter(true).parameterName("mediaType").ignoreAcceptHeader(false)
.useJaf(false).mediaType("json", MediaType.APPLICATION_JSON)
.mediaType("csv", new MediaType("text", "csv"));
}
}
package ti.projects;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import java.util.Arrays;
import java.util.List;
@Controller
public class ExampleController {
@RequestMapping(
value = "/newEmployee",
consumes = "text/csv",
produces = MediaType.TEXT_PLAIN_VALUE,
method = RequestMethod.POST)
@ResponseBody
@ResponseStatus(HttpStatus.OK)
public String handleRequest (@RequestBody EmployeeList employeeList) {
System.out.printf("In handleRequest method, employeeList: %s%n", employeeList.getList());
String s = String.format("size: " + employeeList.getList().size());
System.out.println(s);
return s;
}
@RequestMapping(
value = "/employeeList",
produces = {"text/csv", "application/json"},
method = RequestMethod.GET
)
@ResponseBody
@ResponseStatus(HttpStatus.OK)
public EmployeeList handleRequest2 () {
List<Employee> list = Arrays.asList(
new Employee("1", "Tina", "111-111-1111"),
new Employee("2", "John", "222-222-2222")
);
EmployeeList employeeList = new EmployeeList();
employeeList.setList(list);
return employeeList;
}
}
package ti.projects;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ContentNegotiationApplication {
public static void main(String[] args) {
SpringApplication.run(ContentNegotiationApplication.class, args);
}
}