我创建了一个端点:
@Path(value = "/users")
@Produces(MediaType.APPLICATION_JSON)
public interface IUserCommtyEndpoint {
@POST
public abstract Response create(
@HeaderParam("user") String username
);
如您所见,我已指定此端点生成MetiaType.APPLICATION_JSON
。
这是实施:
@Override
public Response create(String username) {
String userId = "some string";
return Response
.created(this.uriInfo.getAbsolutePathBuilder().path(userId).build())
.entity(userId)
.build();
}
尽管如此,回复正文内容为some string
而不是""
。因此,浏览器无法使用json格式解析此字符串值。
有什么想法吗?
答案 0 :(得分:0)
Here你可以找到答案。
很快,发送单个字符串不正确。
答案 1 :(得分:0)
如this answer中的问题“ ""
是否是有效的JSON字符串?”所示,最新的JSON RFC 7159表示"some string"
实际上是有效的JSON。 / p>
这另外answer帮助我使用杰克逊找到了问题服务器端的解决方案:
import java.io.IOException;
import java.io.OutputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.MessageBodyWriter;
import com.fasterxml.jackson.databind.ObjectMapper;
public class StringMessageBodyWriter implements MessageBodyWriter<String> {
@Override
public boolean isWriteable(final Class<?> type, final Type genericType, final Annotation[] annotations, final MediaType mediaType) {
return type == String.class && MediaType.APPLICATION_JSON_TYPE.equals(mediaType);
}
@Override
public void writeTo(final String t, final Class<?> type, final Type genericType, final Annotation[] annotations, final MediaType mediaType, final MultivaluedMap<String, Object> httpHeaders, final OutputStream out) throws IOException, WebApplicationException {
final ObjectMapper objectMapper = new ObjectMapper();
objectMapper.writeValue(out, t);
}
}