2014-07-15 2 views
0

JSON으로 데이터 목록을 내 Spring Controller에서 보내려고하지만 "받아 들일 수있는 표현을 찾을 수 없습니다"라는 메시지가 표시됩니다. 아래는 애플리케이션의 다양한 부분에 대한 코드입니다.Spring MVC 3.2 Rest JSON 데이터 변환

의 pom.xml

<hibernate.version>4.1.4.Final</hibernate.version> 
<spring.version>3.2.3.RELEASE</spring.version> 
<spring.data.version>1.3.2.RELEASE</spring.data.version> 
<jackson.version>1.9.12</jackson.version> 
<spring.security.version>3.2.2.RELEASE</spring.security.version> 

<dependency> 
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-mapper-asl</artifactId> 
    <version>${jackson.version}</version> 
</dependency> 
<dependency> 
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-core-asl</artifactId> 
    <version>${jackson.version}</version> 
</dependency> 

<!-- 
<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-core</artifactId> 
    <version>2.1.0</version> 
</dependency> 
<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>2.1.0</version> 
</dependency> 
<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-annotations</artifactId> 
    <version>2.1.0</version> 
</dependency> 
--> 

WebConfig. 나는 다양한 블로그 및 stackoverflow 언급 된 모든 가능한 방법을 시도했다. 나는 또한 논평되는 것을 시험해 보았다.

@Configuration 
@EnableWebMvc 
@EnableTransactionManagement 
@ComponentScan("com.test.testing") 
//@PropertySource("classpath:application.properties") 
@EnableJpaRepositories("com.test.testing.config.dao") 
public class WebAppConfig extends WebMvcConfigurerAdapter { 

    @Resource 
    private Environment env; 

    @Override 
    public void addViewControllers(ViewControllerRegistry registry) { 
     registry.addViewController("/login").setViewName("login"); 
     registry.setOrder(Ordered.HIGHEST_PRECEDENCE); 
    } 




    @Override 
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { 
     configurer.favorPathExtension(true) 
     .useJaf(false) 
     .ignoreAcceptHeader(true) 
     .mediaType("html", MediaType.TEXT_HTML) 
     .mediaType("json", MediaType.APPLICATION_JSON) 
     .mediaType("plain", MediaType.TEXT_PLAIN) 
     .defaultContentType(MediaType.TEXT_HTML); 
    } 

    @Bean 
    public ViewResolver contentNegotiatingViewResolver(
      ContentNegotiationManager manager) { 

     List<ViewResolver> resolvers = new ArrayList<ViewResolver>(); 

     InternalResourceViewResolver r1 = new InternalResourceViewResolver(); 
     r1.setPrefix("/WEB-INF/pages/"); 
     r1.setSuffix(".jsp"); 
     r1.setViewClass(JstlView.class); 
     resolvers.add(r1); 

     JsonViewResolver r2 = new JsonViewResolver(); 

     resolvers.add(r2); 

     ContentNegotiatingViewResolver resolver = new ContentNegotiatingViewResolver(); 
     resolver.setViewResolvers(resolvers); 
     resolver.setContentNegotiationManager(manager); 
     return resolver; 

    } 



    /** 
    * View resolver for returning JSON in a view-based system. Always returns a 
    * {@link MappingJacksonJsonView}. 
    */ 
    public class JsonViewResolver implements ViewResolver { 
     @Override 
     public View resolveViewName(String viewName, Locale locale) 
       throws Exception { 
      MappingJacksonJsonView view = new MappingJacksonJsonView(); 
      view.setPrettyPrint(true); 
      return view; 
     } 
    } 

    @Bean 
    public HandlerExceptionResolver handlerExceptionResolver() { 
     SimpleMappingExceptionResolver exceptionResolver = new SimpleMappingExceptionResolver(); 
     exceptionResolver.setDefaultErrorView("uncaughtException"); 
     Properties mappings = new Properties(); 
     mappings.put(".DataAccessException", "dataAccessFailure"); 
     mappings.put(".NoSuchRequestHandlingMethodException", "resourceNotFound"); 
     mappings.put(".TypeMismatchException", "resourceNotFound"); 
     mappings.put(".MissingServletRequestParameterException", "resourceNotFound"); 
     exceptionResolver.setExceptionMappings(mappings); 
     return exceptionResolver; 
    } 




    /* (non-Javadoc) 
    * @see org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter#configureMessageConverters(java.util.List) 
    */ 

    @Override 
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { 

     converters.add(new org.springframework.http.converter.StringHttpMessageConverter()); 
     //converters.add(new org.springframework.http.converter.json.MappingJacksonHttpMessageConverter()); 
     //converters.add(new org.springframework.http.converter.json.MappingJackson2HttpMessageConverter()); 

     /* 
     org.springframework.http.converter.json.MappingJackson2HttpMessageConverter mappingJacksonHttpMessageConverter = new org.springframework.http.converter.json.MappingJackson2HttpMessageConverter(); 
     mappingJacksonHttpMessageConverter.setObjectMapper(new com.test.testing.objectmapper.MasterDataObjectMapper()); 

     converters.add(mappingJacksonHttpMessageConverter); 

     */ 

     org.springframework.http.converter.json.MappingJacksonHttpMessageConverter mappingJacksonHttpMessageConverter = new MappingJacksonHttpMessageConverter(); 
     mappingJacksonHttpMessageConverter.setObjectMapper(new MasterDataObjectMapper()); 
     converters.add(mappingJacksonHttpMessageConverter); 

     super.configureMessageConverters(converters); 


    } 


} 

컨트롤러. 컨트롤러 유형의 시스템 출력

getMasterTypeData 마스터 데이터 유형 목록 : [MasterType [id = 4, value = Development], MasterType [id = 2, value = Model] , MasterType [ID = 3, 값 = 생산]

@RequestMapping(value = "/getdata/{type}", method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) 
    @ResponseBody 
    public List<MasterType> getMasterTypeData(@PathVariable String type) { 

     MASTERDATATYPE master = MASTERDATATYPE.getMasterDataType(type); 
     List<MasterType> masterdatTypeList = new ArrayList<MasterType>(); 
     System.out.println("getMasterTypeData Input :"+type+",MASTERDATATYPE :"+master); 

     // some logics to populate masterdatTypeList 

     System.out.println("getMasterTypeData Master Data Type List :"+masterdatTypeList); 
     return masterdatTypeList; 
    } 

그리고 마지막으로 내가 브라우저 광고 JSON 객체로 다시 보내려고 MasterType 클래스

@JsonAutoDetect 
public class MasterType implements Serializable { 

/** 
* 
*/ 
private static final long serialVersionUID = 1L; 

private Long id; 
private String value; 

public MasterType() { 
    // TODO Auto-generated constructor stub 
} 

public MasterType(EnvironmentType environmentType){ 
    this.id = environmentType.getId(); 
    this.value = environmentType.getEnvName(); 
} 

public MasterType(OperatingSystemType operatingSystemType){ 
    this.id = operatingSystemType.getId(); 
    this.value = operatingSystemType.getOsName(); 
} 

public MasterType(ServerStorageBillableType serverStorageBillableType){ 
    this.id = serverStorageBillableType.getId(); 
    this.value = serverStorageBillableType.getStorageBillableTypeDesc(); 
} 

public MasterType(ServerStorageStatusType serverStorageStatusType){ 
    this.id = serverStorageStatusType.getId(); 
    this.value = serverStorageStatusType.getStorageStatusName(); 
} 

public MasterType(ServerStorageType serverStorageType){ 
    this.id = serverStorageType.getId(); 
    this.value = serverStorageType.getStorageTypeName(); 
} 

public MasterType(ServerComponentType serverComponentType){ 
    this.id = serverComponentType.getId(); 
    this.value = serverComponentType.getComponentName(); 
} 

/** 
* @return the id 
*/ 
//@JsonProperty 
public Long getId() { 
    return id; 
} 

/** 
* @param id the id to set 
*/ 
public void setId(Long id) { 
    this.id = id; 
} 

/** 
* @return the value 
*/ 
//@JsonProperty 
public String getValue() { 
    return value; 
} 
/** 
* @param value the value to set 
*/ 
public void setValue(String value) { 
    this.value = value; 
} 
/* (non-Javadoc) 
* @see java.lang.Object#hashCode() 
*/ 
@Override 
public int hashCode() { 
    final int prime = 31; 
    int result = 1; 
    result = prime * result + (int) (id^(id >>> 32)); 
    result = prime * result + ((value == null) ? 0 : value.hashCode()); 
    return result; 
} 
/* (non-Javadoc) 
* @see java.lang.Object#equals(java.lang.Object) 
*/ 
@Override 
public boolean equals(Object obj) { 
    if (this == obj) 
     return true; 
    if (obj == null) 
     return false; 
    if (getClass() != obj.getClass()) 
     return false; 
    MasterType other = (MasterType) obj; 
    if (id != other.id) 
     return false; 
    if (value == null) { 
     if (other.value != null) 
      return false; 
    } else if (!value.equals(other.value)) 
     return false; 
    return true; 
} 
/* (non-Javadoc) 
* @see java.lang.Object#toString() 
*/ 
@Override 
public String toString() { 
    StringBuilder builder = new StringBuilder(); 
    builder.append("MasterType [id=").append(id).append(", value=") 
      .append(value).append("]"); 
    return builder.toString(); 
} 

}

당신이 할 수주십시오 도와주세요 이 문제를 해결하려면?

답변

0

요청 헤더가 설정되어 있고 "Accept application/json"이 있는지 확인하여 방화 광구를 사용하여 요청 헤더를 검사 할 수 있습니다.

+0

예, 거기에 도달했지만 어떻게 든 목록을 반환하는 동안 실패했습니다 – Debopam

+0

show-case 프로젝트를 체크 아웃하고 알아낼 수 있습니까? MasterType 클래스를 사용해 보았습니다. 형식 목록을 반환 할 수있었습니다. https://github.com/spring-projects/spring-mvc-showcase – apurvc

관련 문제