Jersey 2.0은 POJOMapping Feature와 동등
Jersey < 2.0을 사용한 경험이 있습니다.지금 JSON Webservice API를 제공하기 위해 전쟁 어플리케이션을 구축하려고 합니다.
현재 Moxy를 설정하기 위해 상당한 시간을 허비하고 있으며, Moxy는 추가된 것보다 훨씬 더 복잡합니다.
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
web.xml에 접속합니다.< 2.0 。
json support를 추가해 주세요라고만 하면 안 될까요?
현재는 서버에 로그 엔트리가 없는 내부 서버 에러가 많이 발생하고 있습니다.또, 「완전히 잘못된 것을 할 필요가 있습니다.이렇게 어려운 것은 아닙니다」라고 생각하고 있습니다.
힌트 주실 분?
아래의 의존관계를 사용하여 자동으로 처리해 주십시오.
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.2.3</version>
</dependency>
web.xml 파일에 정의하려면 다음 절차를 수행합니다.
잭슨:
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>org.glassfish.jersey.jackson.JacksonFeature</param-value>
</init-param>
Moxy
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>org.glassfish.jersey.moxy.json.MoxyFeature</param-value>
</init-param>
그리고 만약 maven을 사용한다면 당신의 pom 파일에 다음과 같은 의존성을 추가합니다.
잭슨
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>your jersey version</version>
</dependency>
Moxy
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>your jersey version</version>
</dependency>
EclipseLink MOXy를 JSON 바인딩 공급자로 설정하려면MOXyJsonProvider
JAX-RS를 통한 클래스Application
학급.
예 #1
package org.example;
import java.util.*;
import javax.ws.rs.core.Application;
import org.eclipse.persistence.jaxb.rs.MOXyJsonProvider;
public class CustomerApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
HashSet<Class<?>> set = new HashSet<Class<?>>(2);
set.add(MOXyJsonProvider.class);
set.add(CustomerService.class);
return set;
}
}
예 #2
package org.example;
import java.util.*;
import javax.ws.rs.core.Application;
import org.eclipse.persistence.jaxb.rs.MOXyJsonProvider;
public class CustomerApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
HashSet<Class<?>> set = new HashSet<Class<?>>(1);
set.add(ExampleService.class);
return set;
}
@Override
public Set<Object> getSingletons() {
MOXyJsonProvider moxyJsonProvider = new MOXyJsonProvider();
moxyJsonProvider.setAttributePrefix("@");
moxyJsonProvider.setFormattedOutput(true);
moxyJsonProvider.setIncludeRoot(true);
moxyJsonProvider.setMarshalEmptyCollections(false);
moxyJsonProvider.setValueWrapper("$");
Map<String, String> namespacePrefixMapper = new HashMap<String, String>(1);
namespacePrefixMapper.put("http://www.example.org/customer", "cust");
moxyJsonProvider.setNamespacePrefixMapper(namespacePrefixMapper);
moxyJsonProvider.setNamespaceSeparator(':');
HashSet<Object> set = new HashSet<Object>(1);
set.add(moxyJsonProvider);
return set;
}
}
자세한 정보는
- http://blog.bdoughan.com/2012/05/moxy-as-your-jax-rs-json-provider.html
- http://blog.bdoughan.com/2013/06/moxy-is-new-default-json-binding.html
사실상 Pojo Mapping Feature 파라미터가 생략된 상태에서 동작했습니다.
이동처:
http://localhost:8080/webapi/myresource/complexObject/foo
다음 json을 생성합니다.
{"name":"foo","value1":1374185178829,"value2":42}
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!-- This web.xml file is not required when using Servlet 3.0 container,
see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html -->
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.example</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/webapi/*</url-pattern>
</servlet-mapping>
</web-app>
진입점:
package com.example;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
/**
* Root resource (exposed at "myresource" path)
*/
@Path("myresource")
public class MyResource {
/**
* Method handling HTTP GET requests. The returned object will be sent
* to the client as "text/plain" media type.
*
* @return String that will be returned as a text/plain response.
*/
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getIt() {
return "Got it!";
}
@Path( "complexObject/{name}" )
@GET
@Produces( { MediaType.APPLICATION_JSON } )
public ComplexObject complexObject( @PathParam( "name" ) String name ) {
return new ComplexObject(name, System.currentTimeMillis(), 42L);
}
}
jsonize할 콩:
package com.example;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
/**
* Root resource (exposed at "myresource" path)
*/
@Path("myresource")
public class MyResource {
/**
* Method handling HTTP GET requests. The returned object will be sent
* to the client as "text/plain" media type.
*
* @return String that will be returned as a text/plain response.
*/
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getIt() {
return "Got it!";
}
@Path( "complexObject/{name}" )
@GET
@Produces( { MediaType.APPLICATION_JSON } )
public ComplexObject complexObject( @PathParam( "name" ) String name ) {
return new ComplexObject(name, System.currentTimeMillis(), 42L);
}
}
이것 역시 정상적으로 동작하고 있어, 문제의 해결이 가장 간단했다(AFA).IT)
pom.xml에 다음 의존관계를 포함하거나 lib 경로에 각 JAR 파일을 포함합니다.
<dependency>
<groupId>com.owlike</groupId>
<artifactId>genson</artifactId>
<version>0.99</version>
</dependency
@XmlAttribute 대신 @XmlElement를 사용하십시오(속성만 @ 접두사를 수신합니다. 변경된 효과를 위해 앱서버를 재시작할 수 있습니다).
언급URL : https://stackoverflow.com/questions/17568469/jersey-2-0-equivalent-to-pojomappingfeature
'programing' 카테고리의 다른 글
SQLDEVELoper에서 백그라운드 프로세스가 완료되었는지 확인하는 방법 (0) | 2023.03.15 |
---|---|
(레일) "RJS"가 뭐죠? (0) | 2023.03.15 |
nginx 서버에서 404를 나타내는 react.display 응용 프로그램 (0) | 2023.03.15 |
Netlify는 페이지 갱신 시 404를 렌더링합니다(React 및 React 라우터 사용). (0) | 2023.03.15 |
내 각도 구성JS 어플리케이션 (0) | 2023.03.15 |