Jersey use Jackson as JSON Provider

原创转载请注明出处:http://agilestyle.iteye.com/blog/2323184

 

Project Diretory

 

Maven Dependency

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>org.fool.jersey</groupId>
	<artifactId>jersey</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>jersey Maven Webapp</name>
	<url>http://maven.apache.org</url>
	<dependencies>
		<dependency>
			<groupId>org.glassfish.jersey.core</groupId>
			<artifactId>jersey-server</artifactId>
			<version>2.23.2</version>
		</dependency>

		<dependency>
			<groupId>org.glassfish.jersey.containers</groupId>
			<artifactId>jersey-container-servlet</artifactId>
			<version>2.23.2</version>
		</dependency>

		<dependency>
			<groupId>org.glassfish.jersey.media</groupId>
			<artifactId>jersey-media-json-jackson</artifactId>
			<version>2.23.2</version>
		</dependency>

		<dependency>
			<groupId>org.glassfish.jersey.core</groupId>
			<artifactId>jersey-client</artifactId>
			<version>2.23.2</version>
		</dependency>

		<dependency>
			<groupId>com.google.guava</groupId>
			<artifactId>guava</artifactId>
			<version>19.0</version>
		</dependency>
	</dependencies>

	<build>
		<finalName>jersey</finalName>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.5.1</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<version>2.7</version>
			</plugin>

			<plugin>
				<groupId>org.eclipse.jetty</groupId>
				<artifactId>jetty-maven-plugin</artifactId>
				<version>9.3.11.v20160721</version>
				<configuration>
					<scanIntervalSeconds>10</scanIntervalSeconds>
					<httpConnector>
						<port>8888</port>
					</httpConnector>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

 

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">

	<display-name>jersey</display-name>

	<servlet>
		<servlet-name>jerseyservlet</servlet-name>
		<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
		<init-param>
			<param-name>jersey.config.server.provider.packages</param-name>
			<param-value>org.fool.jersey</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>jerseyservlet</servlet-name>
		<url-pattern>/rest/*</url-pattern>
	</servlet-mapping>
</web-app>

 

UserProfile.java

package org.fool.jersey.json;

public class UserProfile {
	private boolean primary;
	private String firstName;
	private String lastName;
	private int age;
	private long secretCode;

	public boolean isPrimary() {
		return primary;
	}

	public void setPrimary(boolean primary) {
		this.primary = primary;
	}

	public String getFirstName() {
		return firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getLastName() {
		return lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public long getSecretCode() {
		return secretCode;
	}

	public void setSecretCode(long secretCode) {
		this.secretCode = secretCode;
	}

}

 

UserDetail.java

package org.fool.jersey.json;

import java.util.Date;

import com.fasterxml.jackson.annotation.JsonFormat;

public class UserDetail {
	private int userId;
	private String userName;
	private String userEmail;
	private Date createDate;
	private Date updateDate;
	private UserProfile userProfile;

	public int getUserId() {
		return userId;
	}

	public void setUserId(int userId) {
		this.userId = userId;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getUserEmail() {
		return userEmail;
	}

	public void setUserEmail(String userEmail) {
		this.userEmail = userEmail;
	}
	
	@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
	public Date getCreateDate() {
		return createDate;
	}

	public void setCreateDate(Date createDate) {
		this.createDate = createDate;
	}
	
	@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
	public Date getUpdateDate() {
		return updateDate;
	}

	public void setUpdateDate(Date updateDate) {
		this.updateDate = updateDate;
	}

	public UserProfile getUserProfile() {
		return userProfile;
	}

	public void setUserProfile(UserProfile userProfile) {
		this.userProfile = userProfile;
	}

}

 

OperationStatus.java

package org.fool.jersey.json;

public enum OperationStatus {
	SUCCESS, 
	FAILURE, 
	EXCEPTION
}

 

AddUserException.java

package org.fool.jersey.json;

public class AddUserException extends Exception {
	private static final long serialVersionUID = 1L;

	public AddUserException() {
		super();
	}

	public AddUserException(String errMsg) {
		super(errMsg);
	}

	public AddUserException(String errMsg, Throwable t) {
		super(errMsg, t);
	}
}

 

AddUserRequest.java

package org.fool.jersey.json;

import java.util.Date;

import com.fasterxml.jackson.annotation.JsonFormat;

public class AddUserRequest {
	private String userName;
	private String userEmail;
	private String lastName;
	private String firstName;
	private int age;
	private long secretCode;
	private Date addDate;

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getUserEmail() {
		return userEmail;
	}

	public void setUserEmail(String userEmail) {
		this.userEmail = userEmail;
	}

	public String getLastName() {
		return lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	public String getFirstName() {
		return firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public long getSecretCode() {
		return secretCode;
	}

	public void setSecretCode(long secretCode) {
		this.secretCode = secretCode;
	}
	
	@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
	public Date getAddDate() {
		return addDate;
	}

	public void setAddDate(Date addDate) {
		this.addDate = addDate;
	}

}

 

AddUserResponse.java

package org.fool.jersey.json;

public class AddUserResponse {
	private OperationStatus operationStatus;
	private int transactionId;
	private String userId;
	private String additionalInfo;

	public OperationStatus getOperationStatus() {
		return operationStatus;
	}

	public void setOperationStatus(OperationStatus operationStatus) {
		this.operationStatus = operationStatus;
	}

	public int getTransactionId() {
		return transactionId;
	}

	public void setTransactionId(int transactionId) {
		this.transactionId = transactionId;
	}

	public String getUserId() {
		return userId;
	}

	public void setUserId(String userId) {
		this.userId = userId;
	}

	public String getAdditionalInfo() {
		return additionalInfo;
	}

	public void setAdditionalInfo(String additionalInfo) {
		this.additionalInfo = additionalInfo;
	}

}

 

ErrorResponse.java

package org.fool.jersey.json;

import java.util.Date;

import com.fasterxml.jackson.annotation.JsonFormat;

public class ErrorResponse {
	private String errorId;
	private String exceptionType;
	private String exceptionMsg;
	private Date occurrenceDatetime;

	public String getErrorId() {
		return errorId;
	}

	public void setErrorId(String errorId) {
		this.errorId = errorId;
	}

	public String getExceptionType() {
		return exceptionType;
	}

	public void setExceptionType(String exceptionType) {
		this.exceptionType = exceptionType;
	}

	public String getExceptionMsg() {
		return exceptionMsg;
	}

	public void setExceptionMsg(String exceptionMsg) {
		this.exceptionMsg = exceptionMsg;
	}

	@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
	public Date getOccurrenceDatetime() {
		return occurrenceDatetime;
	}

	public void setOccurrenceDatetime(Date occurrenceDatetime) {
		this.occurrenceDatetime = occurrenceDatetime;
	}

}

 

UserService.java

package org.fool.jersey.json;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

@Path("/api/json")
public class UserService {
	@GET
	@Path("/userDetail")
	@Produces(MediaType.APPLICATION_JSON)
	public UserDetail getUserDetail() throws Exception {
		UserProfile up = new UserProfile();
		up.setAge(30);
		up.setFirstName("Mr");
		up.setLastName("Big");
		up.setSecretCode(9876543210L);
		up.setPrimary(true);

		UserDetail ud = new UserDetail();
		ud.setCreateDate(new Date());
		ud.setUpdateDate(new Date());
		ud.setUserEmail("test@test.org");
		ud.setUserId(666);
		ud.setUserName("MrBig");
		ud.setUserProfile(up);

		return ud;
	}

	@POST
	@Consumes(MediaType.APPLICATION_JSON)
	@Path("/addUser")
	@Produces(MediaType.APPLICATION_JSON)
	public AddUserResponse addUser(AddUserRequest request) {
		System.out.println(String.format("First Name: %s", request.getFirstName()));
		System.out.println(String.format("Last Name: %s", request.getLastName()));
		System.out.println(String.format("Email: %s", request.getUserEmail()));
		System.out.println(String.format("User Name: %s", request.getUserName()));
		System.out.println(String.format("User Age: %d", request.getAge()));
		System.out.println(String.format("Secret Code: %d", request.getSecretCode()));
		SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
		System.out.println(String.format("Add Date: %s", formatter.format(request.getAddDate())));
		System.out.println("-----------------------------");

		AddUserResponse response = new AddUserResponse();
		response.setAdditionalInfo("Operation completed successfully");
		response.setOperationStatus(OperationStatus.SUCCESS);
		response.setTransactionId(576987);
		response.setUserId("666");

		return response;
	}

	@POST
	@Consumes(MediaType.APPLICATION_JSON)
	@Path("/addUser2")
	@Produces(MediaType.APPLICATION_JSON)
	public Response addUser2(AddUserRequest request) throws AddUserException {
		System.out.println(String.format("First Name: %s", request.getFirstName()));
		System.out.println(String.format("Last Name: %s", request.getLastName()));
		System.out.println(String.format("Email: %s", request.getUserEmail()));
		System.out.println(String.format("User Name: %s", request.getUserName()));
		System.out.println(String.format("User Age: %d", request.getAge()));
		System.out.println(String.format("Secret Code: %d", request.getSecretCode()));
		System.out.println("-----------------------------");

		if (request.getSecretCode() == 111111L) {
			Exception exception = new AddUserException("Error created for User 111111");
			
			ErrorResponse errorResponse = new ErrorResponse();
			errorResponse.setErrorId(String.valueOf(Response.Status.FORBIDDEN.getStatusCode()));
			errorResponse.setExceptionMsg(exception.getMessage());
			errorResponse.setExceptionType(exception.getClass().getTypeName());
			errorResponse.setOccurrenceDatetime(new Date());
			
			return Response.status(Response.Status.FORBIDDEN).entity(errorResponse).build();
		}

		AddUserResponse response = new AddUserResponse();
		response.setAdditionalInfo("Operation completed successfully");
		response.setOperationStatus(OperationStatus.SUCCESS);
		response.setTransactionId(576328);
		response.setUserId("7364364");

		return Response.status(Response.Status.OK).entity(response).build();
	}
}

 

JsonClient.java

package org.fool.jersey.json;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import com.google.common.collect.Lists;

public class JsonClient {
	public static void main(String[] args) {
		AddUserRequest exceptionRequest = new AddUserRequest();
		AddUserRequest validRequest = new AddUserRequest();

		exceptionRequest.setAge(32);
		exceptionRequest.setFirstName("Mr");
		exceptionRequest.setLastName("Big");
		exceptionRequest.setSecretCode(111111L);
		exceptionRequest.setUserEmail("test@test.org");
		exceptionRequest.setUserName("MrBig");
		exceptionRequest.setAddDate(new Date());

		validRequest.setAge(30);
		validRequest.setFirstName("Mr");
		validRequest.setLastName("Small");
		validRequest.setSecretCode(111112L);
		validRequest.setUserEmail("test@test.org");
		validRequest.setUserName("MrSmall");
		validRequest.setAddDate(new Date());

		Client client = ClientBuilder.newClient();
		WebTarget webTarget = client.target("http://localhost:8888").path("/rest/api/json/addUser2");
		Response exceptionResponse = webTarget.request(MediaType.APPLICATION_JSON).post(Entity.entity(exceptionRequest, MediaType.APPLICATION_JSON));
		Response validResponse = webTarget.request(MediaType.APPLICATION_JSON).post(Entity.entity(validRequest, MediaType.APPLICATION_JSON));

		List<Response> responseList = Lists.newArrayList();
		responseList.add(exceptionResponse);
		responseList.add(validResponse);

		for (Response response : responseList) {
			if (response.getStatus() == 200) {
				AddUserResponse aur = response.readEntity(AddUserResponse.class);

				System.out.println(String.format("Additional Info: %s", aur.getAdditionalInfo()));
				System.out.println(String.format("Transaction id: %d", aur.getTransactionId()));
				System.out.println(String.format("User id: %s", aur.getUserId()));
				System.out.println(String.format("operation status: %s", aur.getOperationStatus().toString()));
			} else {
				ErrorResponse err = response.readEntity(ErrorResponse.class);

				System.out.println(String.format("Error Id: %s", err.getErrorId()));
				System.out.println(String.format("Error Message: %s", err.getExceptionMsg()));
				System.out.println(String.format("Error Type: %s", err.getExceptionType()));
				SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyy HH:mm:ss");
				System.out.println(String.format("Occured Date: %s", formatter.format(err.getOccurrenceDatetime())));
			}
		}
	}
}

 

Test


这里我们先用Postman来测试第一和第二个方法

http://localhost:8888/rest/api/json/userDetail


 

http://localhost:8888/rest/api/json/addUser


 

最后一个我们用Jersey Client来测试第三个方法


 

参考资料:《RESTFul Web Service Development with Jersey 2.x》—— Han Bo Sun 

 

 

 

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值