2016-10-01 6 views
0

Я получаю эту ошибку при попытке опубликовать данные JSON от контроллера углового контроллера до контроллера SpringMVC. Я пробовал много решений, размещенных здесь, и некоторые другие материалы, доступные в сети. У меня уже есть библиотека джексона в моем пути к классам. А также я не использую maven из-за проблем с Интернетом.415 Неподдерживаемый тип носителя AngularJS to SpringMVC Controller

SpringMVC Контроллер

@Controller 
public class MainController { 

    @RequestMapping("/") 
    public String index() { 
     return "index"; 
    } 

    @RequestMapping(value = "/employee", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) 
    public @ResponseBody 
    String saveEmployee(@RequestBody Employee employee) { 

     //Will do some stuff here. 
     System.out.println("INSIDE CONTROLLER"); 
     StringBuilder json = new StringBuilder(); 

     return json.toString(); 
    } 
} 

AngularJS Контроллер

app.controller('saveEmployeeCtrl', function ($scope, $http) { 
    $scope.employee = {}; 

    $scope.saveEmployee = function() { 
     $http({ 
      method: 'POST', 
      url: 'employee', 
      data: $scope.employee, 
      headers:{'Accept':'application/json', 'Content': 'application/json'} 
     }).success(function(data){ 
      console.log('something nice'); 
     }); 
    }; 
}); 

WebConfig

@EnableWebMvc 
@Configuration 
@ComponentScan("springmvc.com.") 
public class WebConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/webapp/resources/static/app/**") 
       .addResourceLocations("/webapp/resources/static/app/"); 
     registry.addResourceHandler("/webapp/resources/static/lib/**") 
       .addResourceLocations("/webapp/resources/static/lib/"); 
     registry.addResourceHandler("/webapp/resources/static/js/**") 
       .addResourceLocations("/webapp/resources/static/js/"); 
     registry.addResourceHandler("/webapp/resources/static/css/**") 
       .addResourceLocations("/webapp/resources/static/css/"); 
     registry.addResourceHandler("/webapp/webapp/resources/static/views/**") 
       .addResourceLocations("/webapp/webapp/resources/static/views/"); 
     registry.addResourceHandler("/webapp/resources/static/**") 
       .addResourceLocations("/webapp/resources/static/"); 
    } 

    @Override 
    public void configureContentNegotiation(
      ContentNegotiationConfigurer configurer) { 
     configurer.favorPathExtension(false).favorParameter(true) 
       .parameterName("mediaType").ignoreAcceptHeader(true) 
       .useJaf(false).defaultContentType(MediaType.APPLICATION_JSON) 
       .mediaType("xml", MediaType.APPLICATION_XML) 
       .mediaType("json", MediaType.APPLICATION_JSON); 
    } 

    @Bean 
    public ViewResolver getViewResolver() { 
     InternalResourceViewResolver resolver = new InternalResourceViewResolver(); 
     resolver.setPrefix("/WEB-INF/jsp/"); 
     resolver.setSuffix(".jsp"); 
     return resolver; 
    } 

    @Override 
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 
     configurer.enable(); 
    } 
} 

WebAppInitializer

public class WebAppInitializer implements WebApplicationInitializer { 

    private static final String CONFIG_LOCATION = "springmvc.com.config"; 

    @Override 
    public void onStartup(ServletContext servletContext) throws ServletException { 

     System.out.println("***** Initializing Application for " + servletContext.getServerInfo() + " *****"); 

     // Create ApplicationContext 
     AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext(); 
     applicationContext.setConfigLocation(CONFIG_LOCATION); 

     // Add the servlet mapping manually and make it initialize automatically 
     DispatcherServlet dispatcherServlet = new DispatcherServlet(applicationContext); 
     ServletRegistration.Dynamic servlet = servletContext.addServlet("mvc-dispatcher", dispatcherServlet); 

     servlet.addMapping("/"); 
     servlet.setAsyncSupported(true); 
     servlet.setLoadOnStartup(1); 
    } 
} 
+0

Можете ли вы показать нам данные $ scope.employee и Employee Class? – hurricane

ответ

0
  1. Вы отправляете заголовок «Content», но вы должны отправить «Content-Type»
  2. ли вы отправить точно такое же поле в формате JSON, как есть в классе Employee, проверьте, если есть не являются дополнительными полями, потому что у Jackson есть параметр, который он терпит неудачу, если установлено нераспознанное поле. И есть некоторые резолюции по этой проблеме (например, аннотация для вашего класса или изменение этой настройки)

Наиболее важным является то, что отображается в файле журнала вашего серверного приложения. Какое исключение возникает как причина этого статуса http. Таким образом, решения выше не помогают вам, пожалуйста, проверьте журналы (возможно, увеличьте уровень журнала на весну) и разместите его здесь.

UPDATE:

У меня есть несколько дополнительных вопросов:

  • имеет ваш класс Employee получил по умолчанию (не арг) конструктор или, может быть, вы создаете только конструктор с аргументами? Не могли бы вы опубликовать свой класс Employee.
  • У вас есть регистратор, прикрепленный к вашему проекту, есть ли что-либо в файле журнала (если есть, пожалуйста, опубликуйте его)?
+0

Шаг 1, к сожалению, не работал. И у Работника есть точные 2 поля. Мне было интересно, потому что я совершенно новичок в этом деле, мне нужно поставить какую-то аннотацию Джексона в классе Employee? –

+0

Нет, на самом деле не нужно размещать аннотацию Джексона на Employee.class. По умолчанию Джексон должен «JSONize» весь ваш объект из коробки. –

+0

Спасибо. Проблема была в самом деле с библиотекой Джексона. Я загрузил версию «1.9.9 все» и работал очень хорошо. –

Смежные вопросы