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();
}
}
당신이 할 수주십시오 도와주세요 이 문제를 해결하려면?
예, 거기에 도달했지만 어떻게 든 목록을 반환하는 동안 실패했습니다 – Debopam
show-case 프로젝트를 체크 아웃하고 알아낼 수 있습니까? MasterType 클래스를 사용해 보았습니다. 형식 목록을 반환 할 수있었습니다. https://github.com/spring-projects/spring-mvc-showcase – apurvc